Prop Drilling in React: Nevýhody a alternatívy

Prop Drilling in React: Nevýhody a alternatívy
Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

Správa údajov a budovanie silných a udržiavateľných aplikácií sú životne dôležité zručnosti pri vývoji softvéru. Bežným spôsobom modularizácie aplikácií React je použitie vŕtania podpier, ktoré pomáha odovzdávať údaje do stromu komponentov.





MUO video dňa POKRAČUJTE V OBSAHU POKRAČOVANÍM

Keď sa však projekty zväčšujú, vŕtanie v podperách môže mať svoje nevýhody. Preskúmajte problémy súvisiace s vŕtaním podpier a zistite, aké alternatívy sú k dispozícii.





Pochopenie podperného vŕtania

Prop drilling je technika, ktorá odovzdáva údaje do stromu komponentov ako podpery, bez ohľadu na to, či medziľahlé komponenty údaje potrebujú alebo nie.





ako nastaviť virtuálny stroj

Vŕtanie zahŕňa odovzdávanie rekvizít od rodiča jeho podriadeným komponentom a ďalej v hierarchii. Hlavným cieľom je umožniť komponentom na nižších úrovniach stromu prístup a používanie údajov, ktoré poskytujú komponenty vyššej úrovne.

  Schematické znázornenie toho, ako funguje podperné vŕtanie

Nevýhody podperného vŕtania

Zatiaľ čo vŕtanie podpier rieši problém zdieľania údajov, prináša niekoľko nevýhod, ktoré môžu brániť udržiavateľnosti kódu a efektívnosti vývoja.



1. Zvýšená zložitosť

Ako aplikácia rastie, riadenie vŕtania podpier sa stáva zložitejším. To môže viesť ku komplexnej sieti závislostí komponentov, čo sťažuje pochopenie a zmenu kódu.

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

Tu sa údaje z najvyššej úrovne ParentComponent presúvajú do GreatGrandChildComponent prostredníctvom dvoch sprostredkovateľských komponentov.





Ako sa hierarchia komponentov prehlbuje a viac komponentov sa spolieha na podporu, je ťažšie sledovať a riadiť tok údajov.

2. Tesné spojenie

K tomu dochádza, keď sú komponenty na sebe závislé prostredníctvom rekvizít, čo sťažuje ich výmenu alebo opätovné použitie. To môže sťažiť vykonanie zmien v jednom komponente bez ovplyvnenia ostatných.





na čo ľudia používajú kik
 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>
 );
};

Tu obidva podriadené komponenty prijímajú rovnaké údaje zo svojho nadradeného komponentu a odovzdávajú ich GrandChildComponent.

Ak sa údaje aktualizujú, všetky komponenty v hierarchii tiež potrebujú aktualizáciu, aj keď niektoré údaje nepoužívajú. Môže to byť náročné a časovo náročné a zvyšuje to aj riziko zavlečenia chýb.

3. Udržateľnosť kódu

Vŕtanie rekvizít je problémom údržby kódu, pretože nové komponenty potrebujú prístup k rekvizitám prechádzajúcim cez hierarchiu. To môže viesť k chybám, ak potrebujete upraviť veľa komponentov, a nezrovnalostiam, ak sa zmenia rekvizity.

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

Tu ParentComponent odovzdáva hodnotu počtu ako podperu ChildComponent a potom GrandChildComponent.

Ak sa však počet zmení alebo ak existuje nové pravidlo na odovzdanie ďalších rekvizít, budete musieť aktualizovať každý komponent v hierarchii, ktorý rekvizitu používa. Tento proces je náchylný na chyby, sťažuje údržbu kódu a zvyšuje nezrovnalosti alebo chyby.

Skúmanie alternatív k podpernému vŕtaniu

V ekosystéme React existuje veľa riešení na riadenie štátu, ktoré môžete použiť na prekonanie nevýhod vrtných vrtov.

Reagovať Kontext

React Context je funkcia, ktorá umožňuje zdieľanie stavu medzi komponentmi bez prechodu rekvizít. Poskytuje centralizovaný obchod, ku ktorému majú komponenty prístup s háčikom useContext . To môže zlepšiť výkon a uľahčiť správu stavu.

  Vývojový diagram zobrazujúci kontext React poskytujúci údaje všetkým komponentom v aplikácii

Redux

Redux je knižnica správy stavu, ktorá poskytuje jediný globálny stavový sklad. Komponenty môžu pristupovať a aktualizovať stav prostredníctvom akcií a redukcií. To môže pomôcť udržať váš kód organizovaný a môže to uľahčiť ladenie.

  Vývojový diagram zobrazujúci Redux poskytujúci údaje všetkým komponentom v aplikácii

MobX

MobX je knižnica riadenia stavu, ktorá využíva pozorovateľné údaje. To znamená, že komponenty sa môžu prihlásiť k zmenám v stave a reagovať na ne. Knižnica môže urobiť váš kód reaktívnejším a môže zlepšiť výkon.

pripojený k internetu, ale žiadny internet
  Vývojové diagramy zobrazujúce niekoľko konceptov a akcií MobX a ich vzájomné prepojenie

Niečo

Jotai je štátna manažérska knižnica pre React , ktorý používa model atómového stavu. Umožňuje vám vytvárať stavové atómy, ku ktorým môžu komponenty pristupovať a aktualizovať ich.

S Jotai môžete znížiť potrebu vŕtania podpier a dosiahnuť efektívnejší a efektívnejší prístup k riadeniu štátu. Jeho minimalistický dizajn a zameranie na výkon z neho robia presvedčivú voľbu pre správu stavu v aplikáciách React.

  Vývojové diagramy zobrazujúce niekoľko konceptov a akcií Jotai a ich vzájomné prepojenie

Zvládnutie komunikácie s komponentmi: Rozšírenie vašej sady nástrojov nad rámec vŕtania podpier

Prop drilling je technika na odovzdávanie údajov z rodičovských komponentov do dcérskych komponentov. Je efektívny na zdieľanie údajov, ale má niekoľko nevýhod, ktoré môžu sťažiť údržbu a vývoj kódu.

Na prekonanie týchto nevýhod môžete použiť alternatívy ako React Context, Redux a MobX. Tieto riešenia poskytujú centralizovanejší spôsob správy údajov, vďaka čomu je kód lepšie udržiavateľný a škálovateľný.