Component Yako ya Kwanza

Components (vipengele) ni mojawapo ya dhana kuu za React. Ni msingi ambao juu yake unajenga violesura vya mtumiaji (UI), jambo linalozifanya kuwa mahali pazuri pa kuanzia safari yako ya React!

You will learn

  • Component ni nini
  • Nafasi gani components zinacheza katika programu ya React
  • Jinsi ya kuandika component yako ya kwanza ya React

Components: vipengele vya ujenzi wa UI

Kwenye Wavuti, HTML hutuwezesha kuunda hati zilizopangwa vizuri kwa kutumia seti yake ya tagi zilizojengwa ndani kama <h1> na <li>:

<article>
<h1>Component Yangu ya Kwanza</h1>
<ol>
<li>Components: Vipengele vya Ujenzi wa UI</li>
<li>Kufafanua Component</li>
<li>Kutumia Component</li>
</ol>
</article>

Markup hii inawakilisha makala haya <article>, kichwa chake <h1>, na jedwali la yaliyomo (kwa muhtasari) kama orodha iliyopangwa <ol>. Markup kama hii, ikiunganishwa na CSS kwa ajili ya mtindo, na JavaScript kwa ajili ya mwingiliano, ipo nyuma ya kila sidebar, avatar, modal, dropdown—kila kipande cha UI unachokiona kwenye Wavuti.

React hukuruhusu kuunganisha markup, CSS, na JavaScript yako kuwa “components” maalum, elementi za UI zinazoweza kutumika tena kwa programu yako. Msimbo wa jedwali la yaliyomo uliouona hapo juu ungeweza kugeuzwa kuwa component ya <TableOfContents /> ambayo ungeweza kui-render kwenye kila ukurasa. Ndani ya pazia, bado inatumia tagi zilezile za HTML kama <article>, <h1>, n.k.

Kama ilivyo kwa tagi za HTML, unaweza kupanga, kuratibu na kupachika components ili kubuni kurasa nzima. Kwa mfano, ukurasa wa nyaraka unaousoma umetengenezwa kwa components za React:

<PageLayout>
<NavigationHeader>
<SearchBar />
<Link to="/docs">Docs</Link>
</NavigationHeader>
<Sidebar />
<PageContent>
<TableOfContents />
<DocumentationText />
</PageContent>
</PageLayout>

Kadri mradi wako unavyokua, utagundua kuwa michoro yako mingi inaweza kuundwa kwa kutumia tena components ulizoandika tayari, ikiharakisha uendelezaji wako. Jedwali letu la yaliyomo hapo juu lingeweza kuongezwa kwenye skrini yoyote kwa <TableOfContents />! Unaweza hata kuanzisha mradi wako kwa kasi kwa kutumia maelfu ya components zinazoshirikiwa na jamii ya chanzo huria ya React kama Chakra UI na Material UI.

Kufafanua component

Kijadi, wakati wa kuunda kurasa za wavuti, watengenezaji wa wavuti waliweka markup kwenye maudhui yao kisha waliongeza mwingiliano kwa kunyunyiza JavaScript kidogo. Hili lilifanya kazi vizuri wakati mwingiliano ulikuwa jambo la ziada tu kwenye wavuti. Sasa unatarajiwa kwa tovuti nyingi na programu zote. React huweka mwingiliano mbele huku ikitumia teknolojia ileile: component ya React ni function ya JavaScript ambayo unaweza kuinyunyizia markup. Hivi ndivyo inavyoonekana (unaweza kuhariri mfano ulio hapa chini):

export default function Profile() {
  return (
    <img
      src="https://react.dev/images/docs/scientists/MK3eW3Am.jpg"
      alt="Katherine Johnson"
    />
  )
}

Na hivi ndivyo unavyojenga component:

Hatua ya 1: Export component

Kiambishi export default ni sintaksia ya kawaida ya JavaScript (siyo mahususi kwa React). Hukuruhusu kutia alama function kuu katika faili ili baadaye uweze kuii-import kutoka faili nyingine. (Zaidi kuhusu ku-import katika Kuingiza na Kutoa Components!)

Hatua ya 2: Fafanua function

Kwa function Profile() { } unafafanua function ya JavaScript yenye jina Profile.

Pitfall

Components za React ni functions za kawaida za JavaScript, lakini majina yao lazima yaanze na herufi kubwa ama hazitafanya kazi!

Hatua ya 3: Ongeza markup

Component hurudisha tagi ya <img /> yenye sifa za src na alt. <img /> imeandikwa kama HTML, lakini kwa hakika ni JavaScript ndani ya pazia! Sintaksia hii inaitwa JSX, na hukuruhusu kupachika markup ndani ya JavaScript.

Kauli za return zinaweza kuandikwa zote katika mstari mmoja, kama katika component hii:

return <img src="https://react.dev/images/docs/scientists/MK3eW3As.jpg" alt="Katherine Johnson" />;

Lakini kama markup yako haiko yote katika mstari mmoja na neno kuu la return, lazima uifunge ndani ya jozi ya mabano:

return (
<div>
<img src="https://react.dev/images/docs/scientists/MK3eW3As.jpg" alt="Katherine Johnson" />
</div>
);

Pitfall

Bila mabano, msimbo wowote ulio katika mistari baada ya return utapuuzwa!

Kutumia component

Sasa kwa kuwa umefafanua component yako ya Profile, unaweza kuipachika ndani ya components nyingine. Kwa mfano, unaweza ku-export component ya Gallery inayotumia components nyingi za Profile:

function Profile() {
  return (
    <img
      src="https://react.dev/images/docs/scientists/MK3eW3As.jpg"
      alt="Katherine Johnson"
    />
  );
}

export default function Gallery() {
  return (
    <section>
      <h1>Wanasayansi wa ajabu</h1>
      <Profile />
      <Profile />
      <Profile />
    </section>
  );
}

Kile kivinjari kinachokiona

Angalia tofauti katika matumizi ya herufi kubwa na ndogo:

  • <section> ni herufi ndogo, hivyo React inajua tunarejelea tagi ya HTML.
  • <Profile /> inaanza na herufi kubwa P, hivyo React inajua tunataka kutumia component yetu iitwayo Profile.

Na Profile ina HTML zaidi hata: <img />. Mwishoni, hiki ndicho kivinjari kinachokiona:

<section>
<h1>Wanasayansi wa ajabu</h1>
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
</section>

Kupachika na kupanga components

Components ni functions za kawaida za JavaScript, hivyo unaweza kuweka components nyingi katika faili moja. Hili ni rahisi wakati components ni ndogo kiasi au zinahusiana kwa karibu. Kama faili hii itakuwa na msongamano, unaweza kila wakati kuhamisha Profile kwenye faili tofauti. Utajifunza jinsi ya kufanya hivi hivi punde kwenye ukurasa kuhusu imports.

Kwa sababu components za Profile zina-render ndani ya Gallery—hata mara kadhaa!—tunaweza kusema kuwa Gallery ni component-mzazi, ikii-render kila Profile kama “mtoto”. Hii ni sehemu ya uchawi wa React: unaweza kufafanua component mara moja, kisha kuitumia katika sehemu nyingi na mara nyingi upendavyo.

Pitfall

Components zinaweza ku-render components nyingine, lakini kamwe usipachike ufafanuzi wao:

export default function Gallery() {
// 🔴 Kamwe usifafanue component ndani ya component nyingine!
function Profile() {
// ...
}
// ...
}

Kipande cha msimbo hapo juu ni cha polepole sana na husababisha hitilafu (bugs). Badala yake, fafanua kila component katika ngazi ya juu:

export default function Gallery() {
// ...
}

// ✅ Tangaza components katika ngazi ya juu
function Profile() {
// ...
}

Wakati component-mtoto inahitaji data fulani kutoka kwa mzazi, ipitishe kwa props badala ya kupachika ufafanuzi.

Deep Dive

Components hadi chini kabisa

Programu yako ya React huanza kwenye component ya “mzizi” (root). Kwa kawaida, huundwa kiotomatiki unapoanzisha mradi mpya. Kwa mfano, ukitumia CodeSandbox au ukitumia framework Next.js, component-mzizi hufafanuliwa katika pages/index.js. Katika mifano hii, umekuwa uki-export components-mizizi.

Programu nyingi za React hutumia components hadi chini kabisa. Hii inamaanisha hutatumia components kwa vipande vinavyoweza kutumika tena kama vitufe tu, bali pia kwa vipande vikubwa kama sidebars, orodha, na hatimaye, kurasa kamili! Components ni njia rahisi ya kupanga msimbo wa UI na markup, hata kama baadhi yao hutumika mara moja tu.

Frameworks zinazotegemea React huchukua hili hatua zaidi. Badala ya kutumia faili tupu ya HTML na kuiacha React “ichukue jukumu” la kusimamia ukurasa kwa JavaScript, pia huzalisha HTML kiotomatiki kutoka kwa components zako za React. Hili huruhusu programu yako kuonyesha maudhui fulani kabla msimbo wa JavaScript haujapakiwa.

Hata hivyo, tovuti nyingi hutumia React kwa ajili ya kuongeza mwingiliano kwenye kurasa za HTML zilizopo tu. Zina components-mizizi nyingi badala ya moja kwa ukurasa mzima. Unaweza kutumia React kwa wingi—au kwa uchache—kadri unavyohitaji.

Recap

Umepata onjo lako la kwanza la React! Hebu tupitie tena baadhi ya mambo muhimu.

  • React hukuruhusu kuunda components, elementi za UI zinazoweza kutumika tena kwa programu yako.

  • Katika programu ya React, kila kipande cha UI ni component.

  • Components za React ni functions za kawaida za JavaScript isipokuwa:

    1. Majina yao huanza na herufi kubwa kila wakati.
    2. Hurudisha markup ya JSX.

Challenge 1 of 4:
Export component

Sanduku hili la mchanga (sandbox) halifanyi kazi kwa sababu component-mzizi haija-export:

function Profile() {
  return (
    <img
      src="https://react.dev/images/docs/scientists/lICfvbD.jpg"
      alt="Aklilu Lemma"
    />
  );
}

Jaribu kuirekebisha mwenyewe kabla ya kuangalia suluhisho!