Stödborrning kan vara ett användbart knep, men du måste se upp för några besvärliga fallgropar.

Att hantera data och bygga starka, underhållsbara applikationer är viktiga färdigheter i mjukvaruutveckling. Ett vanligt sätt att modularisera dina React-appar är att använda propellborrning, vilket hjälper till att skicka data ner i komponentträdet.

Men när projekten blir större kan propborrning ha sina nackdelar. Utforska problemen kring propellborrning och ta reda på vilka alternativ som finns tillgängliga.

Förstå Prop Drilling

Propsborrning är en teknik som skickar data ner i komponentträdet som rekvisita, oavsett om mellankomponenter behöver data eller inte.

Borrning innebär att skicka rekvisita från en förälder till dess underordnade komponenter och längre ner i hierarkin. Huvudmålet är att göra det möjligt för komponenter på lägre nivåer i trädet att komma åt och använda data som komponenter på högre nivå tillhandahåller.

Nackdelarna med propellborrning

Medan propellborrning löser problemet med att dela data, introducerar det flera nackdelar som kan hindra kodunderhåll och utvecklingseffektivitet.

1. Ökad komplexitet

När en applikation växer blir propborrning svårare att hantera. Detta kan leda till en komplex väv av komponentberoenden, vilket gör koden svår att förstå och ändra.

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> );
};

Här flyttas data från ParentComponent på toppnivå till GreatGrandChildComponent genom två mellanliggande komponenter.

När komponenthierarkin växer djupare och fler komponenter förlitar sig på rekvisitan, blir det svårare att spåra och hantera dataflödet.

2. Tät koppling

Detta inträffar när komponenter är beroende av varandra via rekvisita, vilket gör det svårt att ändra eller återanvända dem. Detta kan göra det svårt att göra ändringar i en komponent utan att påverka de andra.

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>
 );
};

Här får båda underordnade komponenterna samma data från sin överordnade komponent och skickar den vidare till GrandChildComponent.

Om data uppdateras behöver alla komponenter i hierarkin också uppdateras, även om vissa inte använder data. Detta kan vara svårt och tidskrävande, och det ökar också risken för introduktion av buggar.

3. Kodunderhållbarhet

Stödsborrning är ett kodunderhållsproblem eftersom nya komponenter behöver tillgång till rekvisita som passerar genom hierarkin. Detta kan leda till buggar om du behöver modifiera många komponenter, och inkonsekvenser om rekvisita ändras.

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>
 );
};

Här skickar ParentComponent räknevärdet som ett stöd till ChildComponent och sedan till GrandChildComponent.

Men om antalet ändras eller om det finns en ny regel för att skicka extra rekvisita, måste du uppdatera varje komponent i hierarkin som använder rekvisitan. Denna process är felbenägen, vilket gör kodunderhåll svårt och ökar inkonsekvenser eller fel.

Utforska alternativ till propellborrning

Det finns många statliga hanteringslösningar i Reacts ekosystem som du kan använda för att övervinna nackdelarna med propellborrning.

Reagera sammanhang

React Context är en funktion som möjliggör delning av tillstånd mellan komponenter utan att passera rekvisita. Det ger en centraliserad butik som komponenter kan komma åt med useContext-kroken. Detta kan förbättra prestanda och göra det lättare att hantera tillstånd.

på nytt

på nytt är ett statligt förvaltningsbibliotek som tillhandahåller en enda global statlig butik. Komponenter kan komma åt och uppdatera tillståndet genom åtgärder och reducerare. Detta kan hjälpa till att hålla din kod organiserad och kan göra det lättare att felsöka.

MobX

MobX är ett statligt förvaltningsbibliotek som använder observerbar data. Detta innebär att komponenter kan prenumerera på förändringar i tillståndet och agera som svar. Biblioteket kan göra din kod mer reaktiv och kan förbättra prestandan.

Jotai

Jotai är ett statligt ledningsbibliotek för React, som använder en atomär tillståndsmodell. Det låter dig skapa tillståndsatomer som komponenter kan komma åt och uppdatera.

Med Jotai kan du minska behovet av propellborrning och uppnå en mer strömlinjeformad och effektiv statlig förvaltningsstrategi. Dess minimalistiska design och fokus på prestanda gör det till ett övertygande val för att hantera tillstånd i React-applikationer.

Stödsborrning är en teknik för att överföra data från överordnade komponenter till underordnade komponenter. Det är effektivt för att dela data, men det har flera nackdelar som kan göra kod svår att underhålla och utveckla.

För att övervinna dessa nackdelar kan du använda alternativ som React Context, Redux och MobX. Dessa lösningar ger ett mer centraliserat sätt att hantera data, vilket kan göra koden mer underhållbar och skalbar.