React – rekvizīti un bērni (props&children)
Iepriekš jūs uzzinājāt, ka varat nodot rekvizītus komponentam un komponenta ietvaros. Bet ir arī īpašs rekvizīts, kas pazīstams kā props.childs, kas automātiski tiek nodots katram komponentam. Šajā rakstā jūs uzzināsiet par props.children un to,kāds ir tā mērķis.
Lai saprastu jēdzienu props.children, apsveriet šādu reālās dzīves situāciju: jums ir pāris ābolu un pāris bumbieru. Jums šos ābolus nāksies nest kādu attālumu, tāpēc acīmredzot jūs izmantosiet maisiņu, vai somu.
Tas nav “maiss āboliem”. Tā nav “soma ābolu, vai bumbieru pāriem”. Tā ir tikai parasta universāla soma. Nekas šajā somā nepadara to tādu, ka to vajadzētu saukt par somu, kurā jūs vienmēr nēsājat tikai ābolus, ne arī par somu, kurā jūs vienmēr nēsājat tikai un vienīgi bumbierus.
Savā ziņā soma “nav specifiska”, vai tā nav speciāli paredzēta izmantot ābolu ,vai bumbieru pārnēsāšanai. Somas materiāls, izmērs, forma vai krāsa nemainās, jo tā bez problēmām var tikt galā ar ābolu vai bumbieru ievietošanu tajā.
Tagad apsveriet šādu komponentu:
function Apples(props) {
return (
<div className="promo-section">
<div>
<h2>Šie āboli ir: {props.color}</h2>
</div>
<div>
<h3>Tie ir {props.number} āboli.</h3>
</div>
</div>
)
}
export default Apples
function Pears(props) {
return (
<h2>Man nepatīk bumbueri, bet manam draugam, {props.friend}, tie garšo</h2>
)
}
Tagad jautājums ir šāds:
pieņemsim, ka vēlaties, lai maisam, vais somai būtu tāda sastāvdaļa, ko var izmantot, lai “pārvadātu” ābolus vai bumbierus. Kā jūs to darītu?
Šeit parādās props.children.
Somas komponentu var definēt šādi:
function Soma(props) {
const soma = {
padding: "20px",
border: "1px solid gray",
background: "#fff",
margin: "20px 0"
}
return (
<div style={soma}>
{props.children}
</div>
)
}
export default Soma
Tātad, ko tas dara komponentā Soma: tas pievieno iesaiņojuma div ar noteiktu stilu un pēc tam piešķir tai props.childs kā saturu.
Bet kas tas par props.children?
Apsveriet ļoti vienkāršu piemēru:
<Example>
Sveiki visiem
</Example>
Teksts Sveiki, ir JSX elementa piemērs. Iepriekš minētais JSX piemērs ir faila Example.js “izsaukums”, kas mūsdienu React parasti ir funkcijas komponents.
Vai zinājāt, ka šo “Sveiki visiem” teksta daļu var nodot kā nosauktu rekvizītu, renderējot Example komponentu?
Lūk, kā tas izskatītos:
<Example children="Sveiki visiem" />
Labi, ir divi veidi, kā to izdarīt. Bet tas ir tikai sākums.
Ko darīt, ja jūs, teiksim, vēlētos iekļaut tekstu Sveiki h3 HTML elementā?
Acīmredzot JSX tas ir viegli sasniedzams:
<Example children={<h3>Sveiki visiem</h3>} />
Ko darīt, ja <h3>Sveiki</h3> būtu atsevišķs komponents, piemēram, ar nosaukumu Sveiki?
Tādā gadījumā jums būs jāatjaunina kods šādi:
<Example children={<Sveiki />} />
<Example children={<Sveiki message="Sveiki visiem" />} />
Tātad, ņemot vērā piemērus par maisiņu, āboliem un bumbieriem no šī raksta sākuma, bruņojoties ar šīm jaunajām zināšanām, kā jūs varat panākt, lai tas darbotos?
Lūk, kā atveidot komponentu Soma ar komponentu Apples kā props.childs:
<Soma children={<Apples color="yellow" number="5" />} />
<Soma children={<Bumbieri draugs="Juris" />} />
Lai gan iepriekš minētā sintakse varētu izskatīties mazliet dīvaina, ir svarīgi saprast, kas notiek “zem pārsega”.
Faktiski iepriekš minētā sintakse ir tāda pati kā divos tālāk norādītajos piemēros.
<Soma>
<Apples color="yellow" number="5" />
</Soma>
<Soma>
<Pears draugs="Juris" />
</Soma>
Jums var būt pat vairāki ligzdotu JSX elementu līmeņi vai viens JSX elements ar vairākiem bērniem, piemēram:
<Kaste>
<Soma>
<Apples color="yellow" number="5" />
<Pears draugs="Juris" />
</Soma>
</Kaste>
Tātad iepriekš minētajā struktūrā ir elements Kaste JSX, kura iekšpusē ir viens Soma JSX elements, kurā ir Apples un Pairs JSX elements.
Pirms šī raksta beigām vēlreiz apsveriet šo JSX elementu:
<Soma>
<Apples color="yellow" number="5" />
</Soma>
Kas ir Apples to Soma iepriekš minētajā kodā?
Strādājot ar React, ir ļoti svarīgi to saprast.
Noslēgumā jāsaka, ka, redzot JSX elementu, kas apvij kādu citu JSX elementu, varat viegli saprast, ka tas viss ir tikai props.children šī visa fonā.
Atbildēt
Lai komentētu, jums jāpiesakās sistēmā.