Propelersko bušenje može biti koristan trik, ali morat ćete paziti na neke neugodne zamke.
Upravljanje podacima i izgradnja jakih aplikacija koje se lako održavaju ključne su vještine razvoja softvera. Uobičajeni način modularizacije vaših React aplikacija je korištenje prop drillinga, koje pomaže u prijenosu podataka niz stablo komponenti.
No, kako projekti postaju sve veći, propelerno bušenje može imati svoje nedostatke. Istražite probleme vezane uz pomoćno bušenje i saznajte koje su alternative dostupne.
Razumijevanje podupiračkog bušenja
Prop drilling je tehnika koja prosljeđuje podatke niz stablo komponenti kao podupirače, bez obzira na to trebaju li međukomponente podatke ili ne.
Bušenje uključuje prosljeđivanje rekvizita od roditelja do njegovih podređenih komponenti i dalje niz hijerarhiju. Glavni cilj je omogućiti komponentama na nižim razinama stabla pristup i korištenje podataka koje pružaju komponente više razine.
Loše strane podupiračkog bušenja
Dok propelerno bušenje rješava problem dijeljenja podataka, ono uvodi nekoliko nedostataka koji mogu ometati održavanje koda i učinkovitost razvoja.
1. Povećana složenost
Kako primjena raste, propelernim bušenjem postaje sve teže upravljati. To može dovesti do složene mreže ovisnosti o komponentama, čineći kôd teškim za razumijevanje i promjenu.
import ChildComponent from'./ChildComponent';
exportdefaultfunctionParentComponent = () => {
const data = 'Prop drilling!';
return ( <div><ChildComponentdata={data} />div> );
};import GrandChildComponent from'./GrandChildComponent';
exportdefaultfunctionChildComponent = ({ data }) => {
return ( <div><GrandChildComponentdata={data} />div> );
};import GreatGrandChildComponent from'./GreatGrandChildComponent';
exportdefaultfunctionGrandChildComponent = ({ data }) => {
return ( <div><GreatGrandChildComponentdata={data} />div> );
};
exportdefaultfunctionGreatGrandChildComponent = ({ data }) => {
return ( <div><p>{data}p>div> );
};
Ovdje se podaci s najviše razine ParentComponent pomiču u GreatGrandChildComponent kroz dvije posredničke komponente.
Kako hijerarhija komponenti postaje sve dublja, a sve se više komponenti oslanja na podršku, postaje teže pratiti i upravljati protokom podataka.
2. Čvrsto spajanje
To se događa kada komponente ovise jedna o drugoj putem rekvizita, što otežava njihovu promjenu ili ponovnu upotrebu. To može otežati izmjene jedne komponente bez utjecaja na ostale.
import ChildComponentA from'./ChildComponentA';
import ChildComponentB from'./ChildComponentB';exportdefaultfunctionParentComponent = () => {
const sharedData = 'Shared data';
return (
</div>
);
};
import GrandChildComponent from'./GrandChildComponent';
exportdefaultfunctionChildComponentA = ({ data }) => {
return (
Component A</p>
</div>
);
};
import GrandChildComponent from'./GrandChildComponent';
exportdefaultfunctionChildComponentB = ({ data }) => {
return (
Component B</p>
</div>
);
};
exportdefaultfunctionGrandChildComponent = ({ data }) => {
return (
<p>{data}p> </div>
);
};
Ovdje obje podređene komponente primaju iste podatke od svoje nadređene komponente i prosljeđuju ih GrandChildComponent.
Ako se podaci ažuriraju, sve komponente u hijerarhiji također trebaju ažuriranje, čak i ako neke ne koriste podatke. To može biti teško i dugotrajno, a također povećava rizik od unošenja grešaka.
3. Mogućnost održavanja koda
Prop bušenje je problem održavanja koda jer nove komponente trebaju pristup podupiračima koji prolaze kroz hijerarhiju. To može dovesti do grešaka ako trebate modificirati mnoge komponente i nedosljednosti ako se props promijeni.
import ChildComponent from'./ChildComponent';
exportdefaultfunctionParentComponent = () => {
const [count, setCount] = useState(0);const incrementCount = () => {
setCount(count + 1);
};return (
</div>
);
};import GrandChildComponent from'./GrandChildComponent';
exportdefaultfunctionChildComponent = ({ count, incrementCount }) => {
return (
exportdefaultfunctionGrandChildComponent = ({ count }) => {
return (Count: {count}</p>
</div>
);
};
Ovdje ParentComponent prosljeđuje vrijednost brojača kao potporu ChildComponent-u, a zatim GrandChildComponent-u.
No, ako se broj promijeni ili ako postoji novo pravilo za prosljeđivanje dodatnih rekvizita, morat ćete ažurirati svaku komponentu u hijerarhiji koja koristi rekvizit. Ovaj je proces sklon pogreškama, što otežava održavanje koda i povećava nedosljednosti ili pogreške.
Istraživanje alternativa propelerskom bušenju
Postoje mnoga rješenja za upravljanje stanjem u React ekosustavu koja možete koristiti za prevladavanje nedostataka propelernog bušenja.
Reagirajte Kontekst
React Context je značajka koja omogućuje dijeljenje stanja među komponentama bez prosljeđivanja rekvizita. Omogućuje centraliziranu trgovinu kojoj komponente mogu pristupiti s kukom useContext. To može poboljšati performanse i olakšati upravljanje stanjem.
Redux
Redux je knjižnica za upravljanje stanjem koja pruža jednu globalnu pohranu stanja. Komponente mogu pristupiti i ažurirati stanje putem akcija i reduktora. To može pomoći da vaš kod bude organiziran i može olakšati otklanjanje pogrešaka.
MobX
MobX je knjižnica za upravljanje stanjem koja koristi vidljive podatke. To znači da se komponente mogu pretplatiti na promjene u stanju i djelovati kao odgovor. Knjižnica može vaš kod učiniti reaktivnijim i može poboljšati performanse.
Jotai
Jotai je knjižnica za upravljanje stanjem za React, koji koristi model atomskog stanja. Omogućuje vam stvaranje atoma stanja kojima komponente mogu pristupiti i ažurirati ih.
S Jotaijem možete smanjiti potrebu za propelerskim bušenjem i postići jednostavniji i učinkovitiji pristup upravljanju stanjem. Njegov minimalistički dizajn i usmjerenost na performanse čine ga uvjerljivim izborom za upravljanje stanjem u React aplikacijama.
Prop drilling je tehnika za prijenos podataka od nadređenih komponenti do podređenih komponenti. Učinkovit je za dijeljenje podataka, ali ima nekoliko nedostataka koji mogu otežati održavanje i razvoj koda.
Da biste prevladali ove nedostatke, možete koristiti alternative kao što su React Context, Redux i MobX. Ova rješenja pružaju centraliziraniji način upravljanja podacima, što kod može učiniti lakšim za održavanje i skalabilnijim.