-
Notifications
You must be signed in to change notification settings - Fork 47.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to combo multiple ContextProvider #14520
Comments
Hey @hangyangws , I was just thinking about the same problem, and I've found the solution for this in this repo: https://github.com/FormidableLabs/react-context-composer This solution was fine for me, hope it helps you too. Simply put, if you want to get rid of the deep nesting of context providers you can write a util functional component like this: export const ContextProviderComposer = ({contextProviders, children}) => {
return contextProviders.reduceRight((children, parent, index) => React.cloneElement(parent, { children }), children);
};
ContextProviderComposer.propTypes = {
contextProviders: PropTypes.arrayOf(
PropTypes.element,
).isRequired,
children: PropTypes.node.isRequired,
}; And you can use it in a component by listing your context providers: import providerOne from './providerOne.js';
import ProviderTwo from './providerTwo.js';
import ProviderThree from './providerThree.js';
return (
<ContextProviderComposer contextProviders={[
<ProviderOne key={0}/>
<ProviderTwo key={1}/>
<ProviderThree key={2}/>
]}>
{ props.children }
</ContextProviderComposer>
); |
We use the issue tracker for bug reports and feature requests. If you have a question, please check our community support resources: |
I have created another state management library that is better at service composition. Here is a demo of avoiding provider hell. Feel free to try it or read its source(100 lines of code)! |
react-easy-contexts, A simple tool to add multiple React contexts easily. https://github.com/nanxiaobei/react-easy-contexts import { create, useProvider } from 'react-easy-contexts';
const ctx = create({
useX() {
const [x, setX] = useState(0);
return useMemo(() => ({ x, setX }), [x]);
},
useY() {
const [y, setY] = useState(0);
return useMemo(() => ({ y, setY }), [y]);
},
useZ() {
const [z, setZ] = useState(0);
return useMemo(() => ({ z, setZ }), [z]);
},
});
const App = () => {
const Provider = useProvider(ctx);
return (
<Provider>
<AppMain />
</Provider>
);
}; |
I learn the Hooks,it's so good!
Bug when I use hooks: useReducer。I confused by multiple provider.
my simple files
app.js
:./store/index.js
./store/providerOne.js
my confusion
In file
./store/index.js
, I must write many times<Provider>
structure.There is any way to solve it.
The text was updated successfully, but these errors were encountered: