Das Bohren von Stützen kann ein nützlicher Trick sein, Sie müssen sich jedoch vor einigen unangenehmen Fallstricken in Acht nehmen.

Die Verwaltung von Daten und die Erstellung leistungsstarker, wartbarer Anwendungen sind wichtige Fähigkeiten in der Softwareentwicklung. Eine gängige Methode zur Modularisierung Ihrer React-Apps ist die Verwendung von Prop Drilling, das dabei hilft, Daten im Komponentenbaum weiterzuleiten.

Wenn Projekte jedoch größer werden, kann das Bohren mit Propellern seine Nachteile haben. Informieren Sie sich über die Probleme rund um das Bohren von Propellern und finden Sie heraus, welche Alternativen verfügbar sind.

Propellerbohren verstehen

Beim Prop-Drilling handelt es sich um eine Technik, bei der Daten als Props an den Komponentenbaum weitergegeben werden, unabhängig davon, ob Zwischenkomponenten die Daten benötigen oder nicht.

Beim Drilling werden Requisiten von einer übergeordneten Komponente an ihre untergeordneten Komponenten und weiter unten in der Hierarchie weitergegeben. Das Hauptziel besteht darin, Komponenten auf niedrigeren Ebenen des Baums den Zugriff auf und die Nutzung von Daten zu ermöglichen, die Komponenten höherer Ebenen bereitstellen.

instagram viewer

Die Nachteile des Propellerbohrens

Während Prop Drilling das Problem des Datenaustauschs löst, bringt es mehrere Nachteile mit sich, die die Wartbarkeit des Codes und die Entwicklungseffizienz beeinträchtigen können.

1. Erhöhte Komplexität

Je größer die Anwendung, desto schwieriger wird das Bohren von Propellern. Dies kann zu einem komplexen Netz von Komponentenabhängigkeiten führen, wodurch der Code schwer zu verstehen und zu ändern ist.

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

Hier werden Daten von der ParentComponent der obersten Ebene über zwei Zwischenkomponenten an GreatGrandChildComponent übertragen.

Je tiefer die Komponentenhierarchie wächst und je mehr Komponenten auf die Requisite angewiesen sind, desto schwieriger wird es, den Datenfluss zu verfolgen und zu verwalten.

2. Enge Kopplung

Dies geschieht, wenn Komponenten über Requisiten voneinander abhängig sind, was es schwierig macht, sie zu ändern oder wiederzuverwenden. Dies kann es schwierig machen, Änderungen an einer Komponente vorzunehmen, ohne dass sich dies auf die anderen auswirkt.

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

Hier erhalten beide untergeordneten Komponenten dieselben Daten von ihrer übergeordneten Komponente und geben sie an GrandChildComponent weiter.

Wenn die Daten aktualisiert werden, müssen auch alle Komponenten in der Hierarchie aktualisiert werden, auch wenn einige die Daten nicht verwenden. Dies kann schwierig und zeitaufwändig sein und erhöht auch das Risiko der Einführung von Fehlern.

3. Wartbarkeit des Codes

Prop-Drilling ist ein Problem bei der Codepflege, da neue Komponenten Zugriff auf Props benötigen, die durch die Hierarchie geleitet werden. Dies kann zu Fehlern führen, wenn Sie viele Komponenten ändern müssen, und zu Inkonsistenzen, wenn sich Requisiten ändern.

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

Hier übergibt die ParentComponent den Zählwert als Requisite an die ChildComponent und dann an die GrandChildComponent.

Wenn sich jedoch die Anzahl ändert oder es eine neue Regel zur Übergabe zusätzlicher Requisiten gibt, müssen Sie jede Komponente in der Hierarchie aktualisieren, die die Requisite verwendet. Dieser Prozess ist fehleranfällig, was die Codepflege erschwert und zu mehr Inkonsistenzen oder Fehlern führt.

Erkundung von Alternativen zum Propellerbohren

Es gibt viele State-Management-Lösungen im React-Ökosystem, mit denen Sie die Nachteile des Propellerbohrens überwinden können.

Kontext reagieren

React Context ist eine Funktion, die die gemeinsame Nutzung von Zuständen über Komponenten hinweg ermöglicht, ohne dass Requisiten übergeben werden müssen. Es stellt einen zentralen Speicher bereit, auf den Komponenten zugreifen können mit dem useContext-Hook. Dies kann die Leistung verbessern und die Statusverwaltung erleichtern.

Redux

Redux ist eine Zustandsverwaltungsbibliothek, die einen einzigen globalen Zustandsspeicher bereitstellt. Komponenten können über Aktionen und Reduzierungen auf den Status zugreifen und ihn aktualisieren. Dies kann dazu beitragen, Ihren Code organisiert zu halten und das Debuggen zu erleichtern.

MobX

MobX ist eine Zustandsverwaltungsbibliothek, die beobachtbare Daten verwendet. Dies bedeutet, dass Komponenten Zustandsänderungen abonnieren und darauf reagieren können. Die Bibliothek kann Ihren Code reaktiver machen und die Leistung verbessern.

Jotai

Jotai ist eine Zustandsverwaltungsbibliothek für React, das ein atomares Zustandsmodell verwendet. Sie können damit Zustandsatome erstellen, auf die Komponenten zugreifen und die sie aktualisieren können.

Mit Jotai können Sie den Bedarf an Propellerbohrungen reduzieren und einen schlankeren und effizienteren Ansatz für die Zustandsverwaltung erreichen. Sein minimalistisches Design und der Fokus auf Leistung machen es zu einer überzeugenden Wahl für die Statusverwaltung in React-Anwendungen.

Prop Drilling ist eine Technik zur Weitergabe von Daten von übergeordneten Komponenten an untergeordnete Komponenten. Es ist effektiv für den Datenaustausch, weist jedoch mehrere Nachteile auf, die die Wartung und Entwicklung von Code erschweren können.

Um diese Nachteile zu überwinden, können Sie Alternativen wie React Context, Redux und MobX verwenden. Diese Lösungen bieten eine zentralere Möglichkeit zur Datenverwaltung, wodurch der Code wartbarer und skalierbarer wird.