Ի՞ՆՉ Է ԱՐՁԱԳԱՆՔԸ:

React-ը Front-end JavaScript գրադարան է, սակայն հարգանք է ձեռք բերել որպես շրջանակ: Այն մշակվել է Facebook-ի կողմից, որն այժմ հայտնի է որպես Meta, բայց բաց կոդով է և ունի բազմաթիվ ներդրողներ: Այս շրջանակն օգտագործվում է բարձր արձագանքող և լայնածավալ UI ինտերֆեյսներ ստեղծելու համար:

Դրա մոդուլյարությունը թույլ է տալիս ծրագրավորողներին բաժանել էջը փոքր շինանյութերի, որոնք կազմում են մի ամբողջություն: Այս փոքր բլոկները կարող են կրկին օգտագործվել՝ հղում անելով նրանց անվանը և արժեքները փոխանցելով այն վայրում, որտեղ ցանկանում եք, որ դրանք օգտագործվեն:

Երբ տվյալների մեջ փոփոխություն լինի, react-ն ավտոմատ կարձագանքի այս փոփոխությանը և արդյունավետ կերպով կթարմացնի այն, ինչ ցուցադրվում է էկրանին:

React-ն օգտագործում է JSX կոչվող շարահյուսություն (JavaScript և XML); այն հիմնականում HTML է JavaScript-ում: Հետագա բաժիններում մենք կուսումնասիրենք, թե ինչպես է JavaScript-ն օգտագործվում React-ում և ինչպես է օգտագործվում HTML-ը և, վերջապես, ինչպես են դրանք օգտագործվում JSX-ը կազմելու համար:

ԻՆՉՈՒ ՊԵՏՔ Է ՕԳՏԱԳՈՐԾԵԼ REACT:

Պատճառները շատ են, բայց թույլ տվեք նշել մի քանիսը:

Կոդի կրկնակի օգտագործման հնարավորություն

React-ն այս հայեցակարգը տեղափոխում է մեկ այլ մակարդակ: Շրջանակը կառուցված է այս գաղափարի շուրջ՝ թույլ տալով, որ ձեր գրած կոդերի գրեթե յուրաքանչյուր կտոր նորից օգտագործվի՝ օգտագործելով հղումը: Այս մասին ավելի շատ բաղադրիչներ բաժնում:

Համայնքի աջակցություն

Իր ժողովրդականության պատճառով react-ը շատ օգտատերեր ունի: Եթե ​​նոր եք սովորում, ուրեմն ճիշտ ժամանակին եք, քանի որ ձեր նախորդներից շատերը դարձել են React գուրուներ և ավելի քան պատրաստ են օգնել ձեզ: Չե՞ք հավատում ինձ Պարզապես google-ում որոշ ձեռնարկներ և հաշվեք, թե քանիսն են ձեզ սովորեցնում ստեղծել «Անելիքների ցուցակ» դեմո հավելվածներ:

Զարգացման աջակցություն

Իր բաց կոդով բնույթի պատճառով react-ը մշտապես թարմացվում է նոր հնարավորություններով և գրադարաններով՝ զարգացումն էլ ավելի դյուրին դարձնելու համար: Գուրու դառնալուց հետո կարող եք նաև ձեր ներդրումը կատարել:

Ուսուցման կոր

Ենթադրելով, որ դուք 4-րդ կիսամյակի ծրագրային ապահովման մշակման SAIT ուսանող եք, դուք արդեն լավ արձագանքելու ձեր ճանապարհին եք:

Դուք արդեն սովորել եք ծրագրավորման բազմաթիվ լեզուներ, ինչպիսիք են Java-ը կամ նույնիսկ python-ը; Դուք նաև սովորել եք վեբ հավելվածների մշակման հիմունքները և օգտագործել այնպիսի լեզուներ, ինչպիսիք են HTML, CSS և JavaScript:

Նշված հիմունքները ռեակտիվ սովորելու նախադրյալներն են, և քանի որ դուք արդեն գիտեք ծրագրավորման առնվազն մեկ լեզու, ձեզ հարկավոր է սովորել միայն մի քանի լրացուցիչ հասկացություններ և շարահյուսություն:

JAVASCRIPT-ը REACT-ում

ECMAScript

React-ն օգտագործում է ECMAScript6 (ES6); ES6-ը այն ստանդարտն է, որն օգտագործում է JavaScript-ը՝ իմանալու, թե ինչպես վարվել, ինչը լրացուցիչ ֆունկցիոնալություն է հաղորդում JavaScript-ին: Ըստ էության, դա JavaScript-ի տարբերակ է:

JavaScript-ի շարահյուսությանը և հասկացություններին ծանոթ լինելը կարևոր է react-ը հասկանալու և օգտագործելու համար, քանի որ react-ը լեզու չէ. Այն պարզապես մեծացնում է արդեն գոյություն ունեցող լեզուների ֆունկցիոնալությունը:

HTML-ը REACT-ում

Ըստ էության, այն, ինչ անում է React-ը, HTML-ի ցուցադրումն է վեբ էջում:

<!--index.html--!>
  <body>
    <!-- react content will be rendered into this div -->
    <div id="root"></div>
  </body>

//index.js
  //root is the id of an html tag in the index.html page
  
  const domElement = document.getElementById("root");
  /* create a root react element which accepts
  a dom element that the content will be rendered into */
  const root = createRoot(domElement);
  /*call the render method of root which
  accepts the content to render */
  root.render(<h1>Hello World</h1>);

Ինչ է տեղի ունենում, մենք ստեղծում ենք react արմատ՝ անցնելով html տարր, որի մեջ կարտացոլվի կոդը, այնուհետև մենք կանչում ենք render մեթոդը այդ արմատի վրա; render մեթոդը ընդունում է react տարրը, որպեսզի այն վերածվի dom:

HTML տարրը, որին տրամադրվում է կոդը, պայմանականորեն div է index.html էջի ներսում: Այս էջը գտնվում է react հավելվածի ծառի հանրային թղթապանակում:

Նշում. տարրի id-ը պարտադիր չէ, որ լինի արմատ, և պարտադիր չէ, որ տարրը լինի div:

JSX

Ի՞նչ է դա։

Ինչպես նախկինում նշվեց, JSX-ը React-ում օգտագործվող JavaScript-ի շարահյուսական ընդլայնում է: Այն ավելի արդյունավետ է դարձնում կոդավորումը և ավելացնում լրացուցիչ ֆունկցիոնալություն: React-ում JSX-ի օգտագործումը պարտադիր չէ, սակայն խորհուրդ է տրվում:

//using jsx
  const title = <header>This is a react demo</header>;
  const root = createRoot(document.getElementById("root"));
  
  root.render(title);

//using React syntax
  //the first argument is where the element tag is defined
  /*inside the curly braces is where the props(properties)
  of the h1 tag can be defined; to define no properties,
  we can just leave the braces empty or type null*/
  //the third argument is where the children of the element is
  defined
  const title2 = React.createElement("h1", {}, "Hello World");
  const root = createRoot(document.getElementById("root"));
  root.render(title);

Շարահյուսություն

Դուք կարող եք չակերտներ օգտագործել լարային բառացիների համար, իսկ գանգուր փակագծեր՝ JavaScript արտահայտությունների համար; սակայն, դրանք չպետք է օգտագործվեն միասին:

JSX-ը նաև օգտագործում է camelCase անվանման նույն կոնվենցիան, ինչ JavaScript-ը:

Կափարիչի տակ

Երբ JSX-ը կազմվում է, այն դառնում է JavaScript օբյեկտ:

Կուլիսների հետևում JSX կոդը փոխակերպվում է React.createElement() զանգերի՝ օգտագործելով Babel կոչվող տրանսպիլյատորը; արդյունքները React տարրեր են:

Babel-ը փոխակերպում է JavaScript-ի ընթացիկ տարբերակը մի տարբերակի, որը զննարկիչը կարող է մեկնաբանել. սա թույլ է տալիս մեր գրած ծրագրերին աշխատել բազմաթիվ բրաուզերներում:

ԲԱՂԱԴՐԵՐ

Ինչ են նրանք?

Բաղադրիչները օգտագործվում են միջերեսը տարբեր բաժինների բաժանելու համար. Սա այն վայրն է, որտեղ React-ի վերօգտագործելիությունը իսկապես հայտնվում է խաղի մեջ:

Բաղադրիչները կարող են դիտվել որպես գործառույթներ Java-ում: Յուրաքանչյուր բաղադրիչ սովորաբար ունի իր էջը: Այն ներառում է այն բովանդակությունը, որը դուք ցանկանում եք ներկայացնել ցանկացած անհրաժեշտ տրամաբանության հետ մեկտեղ: Ստացված արդյունքը դառնում է ռեակտիվ տարր:

export default function () {
  return(
    //jsx code to render
  );
}

Բաղադրիչները կարող են սահմանվել նաև երկու եղանակով՝ որպես JavaScript ֆունկցիաներ կամ ES6 դասեր; նրանք կատարում են նույն գործողությունը, բայց տարբերվում են այն մանրամասներով, թե ինչպես է դա արվում:

//function component
export default function MyComponent() {
  return(
    //jsx code to render
  );
}
//class component
class MyComponent extends Component {
  render(){
    return(
      //jsx code to render
    );
  }
}

Բաղադրիչները կարող են լինել բույն

Երբ դուք տարբեր բաղադրիչներ եք պատրաստում, դուք կարող եք յուրաքանչյուր բաղադրիչ վերածել ավելի մեծ կոնտեյների բաղադրիչների: Կարող են լինել բազմաթիվ ներդիր բաղադրիչներ, և ծառի հենց վերևում բաղադրիչը React DOM-ի կողմից կվերածվի բրաուզերի հանգույցի:

export default function Child3(){
  return(
    <div>
      <p>Hello World</p>
    </div>
  );
}

export default function Child2(){
  return(
    <div>
      <Child3/>
    </div>
  );
}
export default function Child1(){
  return(
    <div>
      <Child2/>
    </div>
  );
}

export default function ParentComponent(){
  return(
    <div>
      <Child1/>
    </div>
  );
}
const root = createRoot(document.getElementById("root"));
root.render(<ParentComponent/>);

Ե՞րբ օգտագործել բաղադրիչները:

UI-ը բաղադրիչների բաժանելիս, ընդհանուր առմամբ, ցանկանում եք, որ ձեր հավելվածում մի քանի անգամ օգտագործվող կտորները լինեն դրա սեփական բաղադրիչը. ցանկացած մաս, որը բարդ է, կարող է նաև ինքնին բաղադրիչ լինել: Սա հեշտացնում է հավելվածի պահպանումը:

Բաղադրիչների անունները պետք է սկսվեն մեծատառով: Եթե ​​անունը սկսվում է փոքրատառով, react-ը այն կվերաբերվի որպես DOM պիտակ:

ՄԱՏՈՒՑՈՒՄ

React-ը ստեղծում է բրաուզերի DOM-ի պատճենը և պահում այն ​​հիշողության մեջ: Այն կոչվում է վիրտուալ DOM: Բրաուզերի DOM-ն ուղղակիորեն թարմացնելու փոխարեն, այն փոփոխություններ է կատարում իր վիրտուալ DOM-ում:

Այնուհետև վիրտուալ DOM-ը համեմատվում է բրաուզերի DOM-ի հետ և փոփոխությունը կատարվում է տարբերության հիման վրա. React-ը չի թարմացնի ամբողջ էջը, այլ միայն այն, ինչ փոխվել է:

Սա էկրանին ցուցադրվողի թարմացման արդյունավետությունն է, ինչպես նշված է ավելի վաղ

ՊՐՈՊՍ

Հենակետերը, որոնք կարճ են հատկությունների համար, արժեքներ են, որոնք կարող են փոխանցվել բաղադրիչների: Դրանք նման են JavaScript ֆունկցիայի պարամետրերին. դրանք թույլ են տալիս բաղադրիչներին դինամիկ բովանդակություն հաղորդել:

export default function ParentComponent() {
  return (
    <div>
      <ChildComponent name="Blake" />
    </div>
  );
}
export default function ChildComponent(props){
  return(
    <div>
      <h4>
        Thank you for shopping {props.name}, please come again. 
      </h4>
    </div>
  )
}

Երբ հենակետը փոխանցվում է փոփոխականին, դրա արժեքը չի փոխվում, ի տարբերություն այն վիճակների, որոնք շուտով կքննարկվեն. արժեքը, որը փոխանցվում է, այն արժեքն է, որն օգտագործվում է բաղադրիչի ներսում:

Բաղադրիչը կարող է ընդունել միայն մեկ հենարան, բայց հենարանը կարող է լինել ցանկացած JSX հատկանիշ կամ բաղադրիչի զավակ, որը փոխանցում է հենարանը՝ օբյեկտներից, զանգվածներ կամ նույնիսկ ֆունկցիաներ:

ՊԵՏՈՒԹՅՈՒՆՆԵՐ

Պետությունները նման են հենարանների, բայց դրանք սահմանում են բաղադրիչի ատրիբուտները: Պետությունները կառավարվում են բաղադրիչի ներսում, մինչդեռ հենակետերը կառավարվում են բաղադրիչից դուրս:

Երբ ֆունկցիան դուրս է գալիս, փոփոխականները անհետանում են, բայց վիճակի արժեքը պահպանվում է:

Այս օրինակը ցույց կտա, թե ինչպես են վիճակները օգտագործվում դասերում: Գործառույթների մեջ գտնվող պետությունները կցուցադրվեն հաջորդ բաժնում:

class MyClassComponent extends Component {
  //step 1
  constructor(props) {
    super(props);
    this.state = {
    number: 1,
    };
  }
  //step 2
  updateNumber() {
    this.setState({
    number: 2,
    });
  }
  render() {
    return (
      <div>
        {/* step 3 */}
        <ExampleComponent numberOfEggs={this.state.number} />
        <button onClick={updateNumber}>update</button>
      </div>
    );
  }
}

Առաջին քայլը դասի կոնստրուկտորի ներսում պետական ​​փոփոխականի հայտարարումն է, երկրորդ քայլը գործառույթը թարմացնելու վիճակի կարգավորումն է, իսկ երրորդ քայլը՝ վիճակի օգտագործումը render մեթոդում։

Պետությունները նույնպես նման են java-ի դասի ատրիբուտներին, և ի տարբերություն ռեկորդների, դրանք կարող են փոխվել. սակայն, դրանք երբեք չպետք է ուղղակիորեն փոխվեն: Դուք միշտ պետք է պատճենեք գոյություն ունեցող վիճակին, թարմացնեք պատճենը, ապա դրեք այդ թարմացված պատճենին: Բացի այդ, երբ դասում վիճակի նոր արժեք է սահմանվում, այն պետք է փոխվի միայն setState() մեթոդի միջոցով:

// Wrong
this.state.name = "Blake";
// Correct
this.setState({ name: "Blake" });

Պետությունները կարող են ուղղակիորեն վերագրվել միայն սկզբնական արժեքին:

//declaring states
constructor(props) {
  super(props);
  this.state = {
  number: 1,
  };
}

Դասի վիճակները օբյեկտներ են, մինչդեռ ֆունկցիաներում դրանք կարող են լինել տողեր կամ այլ թվային արժեքներ: Քանի որ օբյեկտները կարող են ունենալ մի քանի ատրիբուտներ, դուք կարող եք օգտագործել այն մի քանի վիճակներ պահելու համար:

constructor(props) {
  super(props);
  this.state = {
  number: 1,
  name: 'Blake',
  };
}

Դասերի և ֆունկցիաների վիճակի փոփոխականների թարմացման տրամաբանությունը նույնպես տարբերվում է: Դասում վիճակներ օգտագործելիս, setState-ով վիճակի թարմացումը կմիավորի նոր արժեքի մեջ կատարված փոփոխությունները արդեն գոյություն ունեցող արժեքների հետ:

Կեռիկներ

Կեռիկները կոդերի փաթեթներ են, որոնք թույլ են տալիս առանց դասի օգտագործել վիճակը և այլ հնարավորություններ: Դրանք ներմուծվում են բաղադրիչի մեջ և օգտագործվում են ֆունկցիայի նման: Կան նախապես սահմանված կեռիկներ և հատուկ կեռիկներ, որոնք ծրագրավորողը կարող է պատրաստել:

Պարզության համար մենք կքննարկենք միայն useState կեռիկը: Այն թույլ է տալիս մեզ օգտագործել վիճակները ֆունկցիաներում:

import { useState } from "react";

export default function MyComponent() {
  const [clientName, setClientName] = useState("John");
  function changeName() {
    setClientName("Blake");
  }
  return (
    <div>
      <p>hello {clientName}</p>
      <input type="text" />
      <button onClick={changeName}>Click</button>
   </div>
  );
}

Առաջին քայլը ներմուծումն է, այնուհետև մենք հայտարարում ենք պետական ​​փոփոխական, որից հետո սահմանում ենք վիճակը թարմացնելու գործառույթը։ Փոփոխականն այժմ պատրաստ է օգտագործման համար:

Կոդի այս տողի առաջին մասը ոչնչացնում է useState կեռիկի վերադարձի արժեքները: Այն վերադարձնում է վիճակի սկզբնական արժեքը, որը որոշվում է արգումենտով, որը փոխանցվում է useState կեռիկին, և երկրորդ արժեքը, որը վերադարձնում է, այն ֆունկցիան է, որն օգտագործվում է վիճակի արժեքը փոխելու համար:

Դուք կարող եք հայտարարել մի քանի վիճակի փոփոխականներ, կամ կարող եք հայտարարել մեկ վիճակի փոփոխական, որը պարունակում է օբյեկտ կամ նույնիսկ զանգվածներ:

const [clientName, setClientName] = useState("John");
const [clientId, setClientId] = useState("John");
const [clientStatus, setClientStatus] = useState("John");

Ֆունկցիայում վիճակները թարմացնելիս այն փոխարինում է գոյություն ունեցող արժեքը նոր արժեքով՝ դրանք միաձուլելու փոխարեն, ինչպես դա արվում է դասերում վիճակներ օգտագործելիս:

Սա խնդիր չէ մեկ արժեքի փոփոխականների համար, բայց օբյեկտների կամ նույնիսկ զանգվածի մեկ արժեքի թարմացումը խնդիր կառաջացնի:

Սա կարելի է շրջանցել՝ փոխանցելով ամբողջ օբյեկտը/զանգվածը որպես վիճակի նոր արժեք՝ դրանց ներսում մեկ արժեքի փոխարեն:

Աղբյուրներ: