Prop Drilling in React: Mga Kakulangan at Mga Alternatibo

Prop Drilling in React: Mga Kakulangan at Mga Alternatibo
Ang mga mambabasang tulad mo ay tumutulong sa pagsuporta sa MUO. Kapag bumili ka gamit ang mga link sa aming site, maaari kaming makakuha ng isang affiliate na komisyon. Magbasa pa.

Ang pamamahala ng data at pagbuo ng matibay, napapanatiling mga application ay mahahalagang kasanayan sa pagbuo ng software. Ang isang karaniwang paraan ng modularizing ng iyong React app ay ang paggamit ng prop drilling, na tumutulong sa pagpasa ng data pababa sa component tree.





libreng walang limitasyong pagtawag at pag-text ng app
MUO video ng araw MAG-SCROLL PARA MAGPATULOY SA NILALAMAN

Ngunit, habang lumalaki ang mga proyekto, maaaring magkaroon ng mga kakulangan ang prop drilling. Galugarin ang mga isyu sa paligid ng prop drilling at alamin kung anong mga alternatibo ang available.





Pag-unawa sa Prop Drilling

Ang prop drilling ay isang pamamaraan na nagpapasa ng data sa puno ng bahagi bilang mga prop, hindi alintana kung kailangan ng mga intermediate na bahagi ang data o hindi.





Ang pagbabarena ay nagsasangkot ng pagpasa ng mga props mula sa isang magulang sa mga bahagi ng anak nito, at higit pa sa hierarchy. Ang pangunahing layunin ay upang paganahin ang mga bahagi sa mas mababang antas ng puno na i-access at gamitin ang data na ibinibigay ng mga mas mataas na antas na bahagi.

  Isang diagrammatic na representasyon kung paano gumagana ang prop drilling

Ang Mga Kahinaan ng Prop Drilling

Habang nilulutas ng prop drilling ang problema sa pagbabahagi ng data, nagpapakilala ito ng ilang mga disbentaha na maaaring hadlangan ang pagpapanatili ng code at kahusayan sa pag-unlad.



1. Tumaas na Pagiging Kumplikado

Habang lumalaki ang isang application, nagiging mas mahirap pangasiwaan ang prop drilling. Maaari itong humantong sa isang kumplikadong web ng mga dependency ng bahagi, na ginagawang mahirap maunawaan at baguhin ang code.

 import ChildComponent from './ChildComponent'; 

export default function ParentComponent = () => {
  const data = 'Prop drilling!';
  return ( <div> <ChildComponent data={data} /> </div> );
};

import GrandChildComponent from './GrandChildComponent';

export default function ChildComponent = ({ data }) => {
  return ( <div> <GrandChildComponent data={data} /> </div> );
};

import GreatGrandChildComponent from './GreatGrandChildComponent';

export default function GrandChildComponent = ({ data }) => {
  return ( <div> <GreatGrandChildComponent data={data} /> </div> );
};

export default function GreatGrandChildComponent = ({ data }) => {
  return ( <div> <p>{data}</p> </div> );
};

Dito, ang data mula sa nangungunang antas na ParentComponent ay lumilipat sa GreatGrandChildComponent sa pamamagitan ng dalawang intermediary na bahagi.





Habang lumalalim ang hierarchy ng bahagi, at mas maraming bahagi ang umaasa sa prop, nagiging mas mahirap na subaybayan at pamahalaan ang daloy ng data.

2. Mahigpit na Pagkakabit

Nangyayari ito kapag ang mga bahagi ay umaasa sa isa't isa sa pamamagitan ng mga props, na ginagawang mahirap baguhin o muling gamitin ang mga ito. Maaari nitong maging mahirap na gumawa ng mga pagbabago sa isang bahagi nang hindi naaapektuhan ang iba.





 import ChildComponentA from './ChildComponentA';  
import ChildComponentB from './ChildComponentB';

export default function ParentComponent = () => {
  const sharedData = 'Shared data';

 return (
    <div>
     <ChildComponentA data={sharedData} />
     <ChildComponentB data={sharedData} />
    </div>
 );
};

import GrandChildComponent from './GrandChildComponent';

export default function ChildComponentA = ({ data }) => {
  return (
   <div>
     <p>Component A</p>
     <GrandChildComponent data={data} />
    </div>
 );
};

import GrandChildComponent from './GrandChildComponent';

export default function ChildComponentB = ({ data }) => {
  return (
   <div>
     <p>Component B</p>
     <GrandChildComponent data={data} />
    </div>
 );
};

export default function GrandChildComponent = ({ data }) => {
  return (
    <div> <p>{data}</p> </div>
 );
};

Dito, ang parehong child component ay tumatanggap ng parehong data mula sa kanilang parent component at ipinapasa ito sa GrandChildComponent.

Kung maa-update ang data, kailangan ding i-update ang lahat ng bahagi sa hierarchy, kahit na ang ilan ay hindi gumagamit ng data. Maaari itong maging mahirap at matagal, at pinapataas din nito ang panganib ng pagpasok ng mga bug.

3. Pagpapanatili ng Code

Ang prop drilling ay isang isyu sa pagpapanatili ng code dahil ang mga bagong bahagi ay nangangailangan ng access sa mga props na dumaan sa hierarchy. Maaari itong humantong sa mga bug kung kailangan mong baguhin ang maraming bahagi, at hindi pagkakapare-pareho kung magbago ang mga props.

 import ChildComponent from './ChildComponent';  

export default function ParentComponent = () => {
  const [count, setCount] = useState(0);

  const incrementCount = () => {
    setCount(count + 1);
  };

  return (
    <div>
     <ChildComponent count={count} incrementCount={incrementCount} />
    </div>
 );
};

import GrandChildComponent from './GrandChildComponent';

export default function ChildComponent = ({ count, incrementCount }) => {
  return (
    <div>
      <button onClick={incrementCount}>Increment</button>
      <GrandChildComponent count={count} />
    </div>
 );
};

export default function GrandChildComponent = ({ count }) => {
  return (
    <div>
      <p>Count: {count}</p>
   </div>
 );
};

Dito ipinapasa ng ParentComponent ang count value bilang prop sa ChildComponent at pagkatapos ay sa GrandChildComponent.

Ngunit, kung magbago ang bilang o kung may bagong panuntunan na magpasa ng mga karagdagang prop, kakailanganin mong i-update ang bawat bahagi sa hierarchy na gumagamit ng prop. Ang prosesong ito ay madaling kapitan ng error, ginagawang mahirap ang pagpapanatili ng code at dumarami ang mga hindi pagkakapare-pareho o mga error.

Paggalugad ng mga Alternatibo sa Prop Drilling

Mayroong maraming mga solusyon sa pamamahala ng estado sa React ecosystem na magagamit mo upang madaig ang mga kakulangan ng prop drilling.

Konteksto ng React

Ang React Context ay isang feature na nagbibigay-daan sa pagbabahagi ng estado sa mga bahagi nang hindi nagpapasa ng mga props. Nagbibigay ito ng isang sentralisadong tindahan na maaaring ma-access ng mga bahagi gamit ang useContext hook . Maaari nitong pahusayin ang pagganap at gawing mas madaling pamahalaan ang estado.

  Isang flowchart na nagpapakita ng React Context na nagbibigay ng data sa lahat ng bahagi sa isang application

Redux

Redux ay isang library ng pamamahala ng estado na nagbibigay ng isang pandaigdigang tindahan ng estado. Maaaring i-access at i-update ng mga bahagi ang estado sa pamamagitan ng mga aksyon at reducer. Makakatulong ito upang mapanatiling maayos ang iyong code at maaaring gawing mas madali ang pag-debug.

  Isang flowchart na nagpapakita ng Redux na nagbibigay ng data sa lahat ng bahagi sa isang application

MobX

MobX ay isang library ng pamamahala ng estado na gumagamit ng nakikitang data. Nangangahulugan ito na ang mga bahagi ay maaaring mag-subscribe sa mga pagbabago sa estado at kumilos bilang tugon. Ang library ay maaaring gawing mas reaktibo ang iyong code at maaaring mapabuti ang pagganap.

  Isang flow diagram na nagpapakita ng ilang konsepto at pagkilos ng MobX at kung paano sila nag-uugnay sa isa't isa

Isang bagay

Ang Jotai ay isang library ng pamamahala ng estado para sa React , na gumagamit ng atomic state model. Pinapayagan ka nitong lumikha ng mga atom ng estado na maaaring ma-access at ma-update ng mga bahagi.

Sa Jotai, maaari mong bawasan ang pangangailangan para sa prop drilling at makamit ang isang mas streamlined at mahusay na diskarte sa pamamahala ng estado. Ang minimalist nitong disenyo at pagtutok sa pagganap ay ginagawa itong isang nakakahimok na pagpipilian para sa pamamahala ng estado sa mga application ng React.

  Isang flow diagram na nagpapakita ng ilang konsepto at pagkilos ng Jotai at kung paano sila nag-uugnay sa isa't isa

Mastering Component Communication: Pagpapalawak ng Iyong Toolbox Higit pa sa Prop Drilling

Ang prop drilling ay isang pamamaraan para sa pagpasa ng data mula sa mga pangunahing bahagi patungo sa mga bahagi ng bata. Ito ay epektibo para sa pagbabahagi ng data, ngunit mayroon itong ilang mga disbentaha na maaaring maging mahirap na mapanatili at bumuo ng code.

Upang malampasan ang mga kakulangang ito, maaari kang gumamit ng mga alternatibo tulad ng React Context, Redux, at MobX. Nagbibigay ang mga solusyong ito ng mas sentralisadong paraan upang pamahalaan ang data, na maaaring gawing mas mapanatili at nasusukat ang code.