Kupitisha Props kwa Component
Components (vipengele) za React hutumia props kuwasiliana na kila mmoja. Kila component-mzazi inaweza kupitisha taarifa fulani kwa components zake za mtoto kwa kuzipa props. Props zinaweza kukukumbusha sifa za HTML, lakini unaweza kupitisha thamani yoyote ya JavaScript kupitia kwao, ikijumuisha objects, arrays (safu), na functions.
You will learn
- Jinsi ya kupitisha props kwa component
- Jinsi ya kusoma props kutoka kwa component
- Jinsi ya kubainisha thamani chaguo-msingi kwa props
- Jinsi ya kupitisha JSX fulani kwa component
- Jinsi props zinavyobadilika baada ya muda
Props zinazofahamika
Props ni taarifa unazopitisha kwa tagi ya JSX. Kwa mfano, className, src, alt, width, na height ni baadhi ya props unazoweza kupitisha kwa <img>:
function Avatar() { return ( <img className="avatar" src="https://react.dev/images/docs/scientists/1bX5QH6.jpg" alt="Lin Lanying" width={100} height={100} /> ); } export default function Profile() { return ( <Avatar /> ); }
Props unazoweza kupitisha kwa tagi ya <img> zimebainishwa mapema (ReactDOM inafuata kiwango cha HTML). Lakini unaweza kupitisha props zozote kwa components zako mwenyewe, kama vile <Avatar>, ili kuzibinafsisha. Hivi ndivyo unavyofanya!
Kupitisha props kwa component
Katika msimbo huu, component ya Profile haipitishi props zozote kwa component yake ya mtoto, Avatar:
export default function Profile() {
return (
<Avatar />
);
}Unaweza kuipa Avatar props fulani kwa hatua mbili.
Hatua ya 1: Pitisha props kwa component-mtoto
Kwanza, pitisha props fulani kwa Avatar. Kwa mfano, hebu tupitishe props mbili: person (object), na size (namba):
export default function Profile() {
return (
<Avatar
person={{ name: 'Lin Lanying', imageId: '1bX5QH6' }}
size={100}
/>
);
}Sasa unaweza kusoma props hizi ndani ya component ya Avatar.
Hatua ya 2: Soma props ndani ya component-mtoto
Unaweza kusoma props hizi kwa kuorodhesha majina yao person, size yakitenganishwa na koma ndani ya ({ na }) mara tu baada ya function Avatar. Hili hukuruhusu kuzitumia ndani ya msimbo wa Avatar, kama ambavyo ungefanya na kigezo.
function Avatar({ person, size }) {
// person na size zinapatikana hapa
}Ongeza mantiki fulani kwa Avatar inayotumia props za person na size kwa ku-render, nawe umemaliza.
Sasa unaweza kusanidi Avatar ili i-render kwa njia nyingi tofauti kwa props tofauti. Jaribu kubadilisha thamani!
import { getImageUrl } from './utils.js'; function Avatar({ person, size }) { return ( <img className="avatar" src={getImageUrl(person)} alt={person.name} width={size} height={size} /> ); } export default function Profile() { return ( <div> <Avatar size={100} person={{ name: 'Katsuko Saruhashi', imageId: 'YfeOqp2' }} /> <Avatar size={80} person={{ name: 'Aklilu Lemma', imageId: 'OKS67lh' }} /> <Avatar size={50} person={{ name: 'Lin Lanying', imageId: '1bX5QH6' }} /> </div> ); }
Props hukuruhusu kufikiria kuhusu components za mzazi na mtoto kwa kujitegemea. Kwa mfano, unaweza kubadilisha props za person au size ndani ya Profile bila kulazimika kufikiria jinsi Avatar inavyozitumia. Vivyo hivyo, unaweza kubadilisha jinsi Avatar inavyotumia props hizi, bila kuangalia Profile.
Unaweza kufikiria props kama “vifundo” (knobs) unavyoweza kurekebisha. Hutimiza jukumu lilelile ambalo hoja (arguments) hutimiza kwa functions—kwa hakika, props ndicho pekee kilicho hoja kwa component yako! Functions za components za React hukubali hoja moja tu, object ya props:
function Avatar(props) {
let person = props.person;
let size = props.size;
// ...
}Kwa kawaida hauhitaji object nzima ya props yenyewe, hivyo unaipasua (destructure) kuwa props mahususi.
Kubainisha thamani chaguo-msingi kwa prop
Kama unataka kuipa prop thamani chaguo-msingi ya kurejea pale ambapo hakuna thamani iliyobainishwa, unaweza kufanya hivyo kwa destructuring kwa kuweka = na thamani chaguo-msingi mara tu baada ya kigezo:
function Avatar({ person, size = 100 }) {
// ...
}Sasa, kama <Avatar person={...} /> ita-render bila prop ya size, size itawekwa kuwa 100.
Thamani chaguo-msingi hutumika tu kama prop ya size haipo au kama unapitisha size={undefined}. Lakini kama unapitisha size={null} au size={0}, thamani chaguo-msingi haitatumika.
Kupeleka props kwa sintaksia ya JSX spread
Wakati mwingine, kupitisha props kunakuwa na marudio mengi sana:
function Profile({ person, size, isSepia, thickBorder }) {
return (
<div className="card">
<Avatar
person={person}
size={size}
isSepia={isSepia}
thickBorder={thickBorder}
/>
</div>
);
}Hakuna ubaya wowote kwa msimbo wenye marudio—unaweza kuwa unaosomeka zaidi. Lakini wakati mwingine unaweza kuthamini ufupi. Baadhi ya components hupeleka props zao zote kwa watoto wao, kama ambavyo Profile hii inavyofanya na Avatar. Kwa sababu hazitumii yoyote kati ya props zao moja kwa moja, inaweza kuwa na maana kutumia sintaksia fupi zaidi ya “spread”:
function Profile(props) {
return (
<div className="card">
<Avatar {...props} />
</div>
);
}Hili hupeleka props zote za Profile kwa Avatar bila kuorodhesha kila jina lao.
Tumia sintaksia ya spread kwa kiasi. Kama unaitumia kwenye kila component nyingine, kuna kitu hakiko sawa. Mara nyingi, hili huashiria kuwa unapaswa kugawanya components zako na kupitisha children kama JSX. Zaidi kuhusu hilo baadaye!
Kupitisha JSX kama children
Ni jambo la kawaida kupachika tagi za kivinjari zilizojengwa ndani:
<div>
<img />
</div>Wakati mwingine utataka kupachika components zako mwenyewe kwa njia ileile:
<Card>
<Avatar />
</Card>Unapopachika maudhui ndani ya tagi ya JSX, component-mzazi itapokea maudhui hayo katika prop iitwayo children. Kwa mfano, component ya Card iliyo hapa chini itapokea prop ya children iliyowekwa kuwa <Avatar /> na kui-render ndani ya div ya kufunika:
import Avatar from './Avatar.js'; function Card({ children }) { return ( <div className="card"> {children} </div> ); } export default function Profile() { return ( <Card> <Avatar size={100} person={{ name: 'Katsuko Saruhashi', imageId: 'YfeOqp2' }} /> </Card> ); }
Jaribu kubadilisha <Avatar> iliyo ndani ya <Card> na maandishi fulani ili kuona jinsi component ya Card inavyoweza kufunika maudhui yoyote yaliyopachikwa. Haihitaji “kujua” kile kinachо-render ndani yake. Utaona mpangilio huu unaonyumbulika katika sehemu nyingi.
Unaweza kufikiria component yenye prop ya children kama iliyo na “shimo” linaloweza “kujazwa” na components zake za mzazi kwa JSX yoyote. Mara nyingi utatumia prop ya children kwa vifuniko vya kuonekana: paneli, gridi, n.k.

Illustrated by Rachel Lee Nabors
Jinsi props zinavyobadilika baada ya muda
Component ya Clock iliyo hapa chini hupokea props mbili kutoka kwa component yake ya mzazi: color na time. (Msimbo wa component-mzazi umeachwa kwa sababu unatumia state (hali), ambayo hatutaingia ndani yake bado.)
Jaribu kubadilisha rangi kwenye sanduku la kuchagua lililo hapa chini:
export default function Clock({ color, time }) { return ( <h1 style={{ color: color }}> {time} </h1> ); }
Mfano huu unaonyesha kuwa component inaweza kupokea props tofauti baada ya muda. Props si tuli kila wakati! Hapa, prop ya time hubadilika kila sekunde, na prop ya color hubadilika unapochagua rangi nyingine. Props huakisi data ya component wakati wowote, badala ya mwanzoni tu.
Hata hivyo, props ni immutable—neno kutoka sayansi ya kompyuta linalomaanisha “isiyoweza kubadilika”. Wakati component inahitaji kubadilisha props zake (kwa mfano, kama jibu kwa mwingiliano wa mtumiaji au data mpya), itabidi “iiombe” component yake ya mzazi ipitishe props tofauti—object mpya! Props zake za zamani kisha zitatupwa kando, na hatimaye injini ya JavaScript itarudisha kumbukumbu iliyochukuliwa nazo.
Usijaribu “kubadilisha props”. Unapohitaji kujibu mwingiliano wa mtumiaji (kama kubadilisha rangi iliyochaguliwa), utahitaji “set state”, ambayo unaweza kujifunza kuihusu katika State: Kumbukumbu ya Component.
Recap
- Kupitisha props, ziongeze kwenye JSX, kama ambavyo ungefanya na sifa za HTML.
- Kusoma props, tumia sintaksia ya destructuring ya
function Avatar({ person, size }). - Unaweza kubainisha thamani chaguo-msingi kama
size = 100, ambayo hutumika kwa props zisizopo na zaundefined. - Unaweza kupeleka props zote kwa sintaksia ya JSX spread ya
<Avatar {...props} />, lakini usiitumie kupita kiasi! - JSX iliyopachikwa kama
<Card><Avatar /></Card>itaonekana kama prop yachildrenya component yaCard. - Props ni picha za mnepo za kusoma-tu (read-only) kwa wakati fulani: kila render hupokea toleo jipya la props.
- Huwezi kubadilisha props. Unapohitaji mwingiliano, utahitaji kuweka state.
Challenge 1 of 3: Toa component
Component hii ya Gallery ina markup inayofanana sana kwa profaili mbili. Toa component ya Profile kutoka kwake ili kupunguza marudio. Utahitaji kuchagua props gani za kuipitisha.
import { getImageUrl } from './utils.js'; export default function Gallery() { return ( <div> <h1>Wanasayansi Maarufu</h1> <section className="profile"> <h2>Maria Skłodowska-Curie</h2> <img className="avatar" src={getImageUrl('szV5sdG')} alt="Maria Skłodowska-Curie" width={70} height={70} /> <ul> <li> <b>Taaluma: </b> mwanafizikia na mwanakemia </li> <li> <b>Tuzo: 4 </b> (Tuzo ya Nobel ya Fizikia, Tuzo ya Nobel ya Kemia, Nishani ya Davy, Nishani ya Matteucci) </li> <li> <b>Aligundua: </b> polonium (elementi ya kemikali) </li> </ul> </section> <section className="profile"> <h2>Katsuko Saruhashi</h2> <img className="avatar" src={getImageUrl('YfeOqp2')} alt="Katsuko Saruhashi" width={70} height={70} /> <ul> <li> <b>Taaluma: </b> mwanajiokemia </li> <li> <b>Tuzo: 2 </b> (Tuzo ya Miyake ya jiokemia, Tuzo ya Tanaka) </li> <li> <b>Aligundua: </b> mbinu ya kupima kaboni dioksidi katika maji ya bahari </li> </ul> </section> </div> ); }