Propboring kan være et nyttigt trick, men du skal passe på nogle akavede faldgruber.
Håndtering af data og opbygning af stærke, vedligeholdelige applikationer er vitale færdigheder i softwareudvikling. En almindelig måde at modularisere dine React-apps på er at bruge prop-boring, som hjælper med at sende data ned i komponenttræet.
Men efterhånden som projekterne bliver større, kan propboring have sine ulemper. Udforsk problemerne omkring propboring og find ud af, hvilke alternativer der er tilgængelige.
Forståelse af propboring
Prop-boring er en teknik, der sender data ned i komponenttræet som rekvisitter, uanset om mellemkomponenterne har brug for dataene eller ej.
Boring involverer at overføre rekvisitter fra en forælder til dens underordnede komponenter og længere nede i hierarkiet. Hovedmålet er at gøre det muligt for komponenter på lavere niveauer af træet at få adgang til og bruge data, som komponenter på højere niveau leverer.
Ulemperne ved propboring
Mens propboring løser problemet med at dele data, introducerer det adskillige ulemper, der kan hindre kodevedligeholdelse og udviklingseffektivitet.
1. Øget kompleksitet
Efterhånden som en applikation vokser, bliver propboring sværere at styre. Dette kan føre til et komplekst net af komponentafhængigheder, hvilket gør koden svær at forstå og ændre.
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> );
};
Her flyttes data fra ParentComponent på øverste niveau til GreatGrandChildComponent gennem to mellemliggende komponenter.
Efterhånden som komponenthierarkiet vokser dybere, og flere komponenter er afhængige af støtten, bliver det sværere at spore og administrere dataflow.
2. Tæt kobling
Dette sker, når komponenter er afhængige af hinanden via rekvisitter, hvilket gør det svært at ændre eller genbruge dem. Dette kan gøre det vanskeligt at foretage ændringer i én komponent uden at påvirke de andre.
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>
);
};
Her modtager begge underordnede komponenter de samme data fra deres overordnede komponent og videregiver dem til GrandChildComponent.
Hvis dataene bliver opdateret, skal alle komponenter i hierarkiet også opdateres, selvom nogle ikke bruger dataene. Dette kan være svært og tidskrævende, og det øger også risikoen for at introducere fejl.
3. Kodevedligeholdelse
Støtteboring er et kodevedligeholdelsesproblem, fordi nye komponenter skal have adgang til rekvisitter, der føres gennem hierarkiet. Dette kan føre til fejl, hvis du har brug for at ændre mange komponenter, og uoverensstemmelser, hvis rekvisitter ændres.
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>
);
};
Her sender ParentComponent tælleværdien som en prop til ChildComponent og derefter til GrandChildComponent.
Men hvis antallet ændres, eller hvis der er en ny regel for at sende ekstra rekvisitter, skal du opdatere hver komponent i hierarkiet, der bruger rekvisitterne. Denne proces er udsat for fejl, hvilket gør kodevedligeholdelse svær og øger uoverensstemmelser eller fejl.
Udforskning af alternativer til propboring
Der er mange statsforvaltningsløsninger i React-økosystemet, som du kan bruge til at overvinde ulemperne ved propboring.
Reager kontekst
React Context er en funktion, der muliggør deling af tilstand på tværs af komponenter uden at bestå rekvisitter. Det giver et centraliseret lager, som komponenter kan få adgang til med useContext hook. Dette kan forbedre ydeevnen og gøre det nemmere at administrere tilstanden.
Redux
Redux er et statsadministrationsbibliotek, der giver en enkelt global statsbutik. Komponenter kan få adgang til og opdatere tilstanden gennem handlinger og reducering. Dette kan hjælpe med at holde din kode organiseret og kan gøre det lettere at fejlfinde.
MobX
MobX er et statsforvaltningsbibliotek, der bruger observerbare data. Det betyder, at komponenter kan abonnere på ændringer i staten og handle som reaktion. Biblioteket kan gøre din kode mere reaktiv og kan forbedre ydeevnen.
Jotai
Jotai er et statsforvaltningsbibliotek for React, der bruger en atomtilstandsmodel. Det giver dig mulighed for at oprette tilstandsatomer, som komponenter kan få adgang til og opdatere.
Med Jotai kan du reducere behovet for propboring og opnå en mere strømlinet og effektiv statsforvaltningstilgang. Dets minimalistiske design og fokus på ydeevne gør det til et overbevisende valg til styring af tilstand i React-applikationer.
Prop-boring er en teknik til at overføre data fra overordnede komponenter til underordnede komponenter. Det er effektivt til at dele data, men det har flere ulemper, der kan gøre kode svær at vedligeholde og udvikle.
For at overvinde disse ulemper kan du bruge alternativer som React Context, Redux og MobX. Disse løsninger giver en mere centraliseret måde at administrere data på, hvilket kan gøre koden mere vedligeholdelsesvenlig og skalerbar.