Arrête d'imbriquer tes providers React
Voici un exemple simple de fonction React en TypeScript qui peut aider à combiner de nombreux composants Provider, comme ceux qu’utilise React Context, en une fonction toute simple.
import React, { Fragment } from 'react';
function compose(...components: React.FC[]): React.FC {
return (
components.reduce(
(Accumulator, Component) =>
({ children }: React.ComponentProps<FC>): JSX.Element =>
(
<Accumulator>
<Component>{children}</Component>
</Accumulator>
)
),
(props) => <Fragment {...props} />
);
}
Avec ça, tu peux maintenant composer tes providers comme ça :
import React from 'react';
import { compose } from '@util';
const App = () => {
const Provider = compose(
uiContext.Provider,
authContext.Provider,
exampleContext.Provider,
reallyLongExampleContext.Provider,
);
return (
<Provider>
</App>
</Provider>
);
}
C’est bien, bien mieux que :
import React from 'react';
const App = () => {
const Provider = compose(
uiContext.Provider,
authContext.Provider,
exampleContext.Provider,
reallyLongExampleContext.Provider,
);
return (
<uiContext.Provider>
<authContext.Provider>
<exampleContext.Provider>
<reallyLongExampleContext.Provider>
</App>
</reallyLongExampleContext.Provider>
</exampleContext.Provider>
</authContext.Provider>
</uiContext.Provider>
);
}