Um „property drilling”, also das Durchschleifen von Properties durch mehrere Ebenen von Components, zu vermeiden, kann die React Context API benutzt werden.
In der Komponente, die die Properties erzeugt, wird ein Context generiert:
import { createContext } from 'react';
import { useContext } from 'react';
import { useState } from 'react';
export const someContext = createContext();
const SomeComponent = () => {
const [someVar, setSomeVar] =
useState({ someName: 'someValue' });
const someFunction = () => {
console.log('someFunction called');
};
return (
<someContext.Provider value={{ someVar, someFunction }}>
<div>
<h5>Some Header</h5>
<SomeComponentInBetween />
</div>
</someContext.Provider>
);
};
export default SomeComponent;
Im Context.Provider kann ein Value definiert werden, dass beliebige Inhalte aufnehmen kann, z.B. ein Object mit verschiedenen Properties.
Der mit createContext erzeugte Context wird exportiert, um ihn später in der Komponente „OtherComponent”, die unterhalb der Komponente „SomeComponentInBetween” (hier nicht dargestellt) definiert wird, zu importieren:
import { useContext } from 'react';
import { someContext } from './SomeComponent';
const OtherComponent = () => {
const { someVar, someFunction } = useContext(someContext);
return (
<div>
<p>{someVar}</p>
<button type='button' onClick={someFunction}>
call some function
</button>
</div>
);
};
export default UserContainer;
Damit stehen die in der übergeordneten Komponente als value im Context-Provider definierten Properties in der nachgeordneten Komponente zur Verfügung, ohne dass sie durch alle Ebenen dazwischen geschleift werden müssen.