我想通过考试 setState
组件的方法( SnackBar
)到的所有子组件 _app.js
. 如果我将snackbar的setstate方法传递给_app.js的所有子组件,那么这将是一项非常乏味的任务。因为,从_app.js到单个组件节点大约有4个层次。包括,,
_app.js -> pages -> layouts -> sections -> components
_app.js的片段在这里。
function MyApp({ Component, pageProps }) {
const [ toastOpen, setToastOpen ] = React.useState({
msg: '',
open: false
});
React.useEffect(() => {
pageProps = { ...pageProps, setToastOpen };
}, []);
return (
<React.Fragment>
<ToastMessage
message={ toastOpen.msg }
setOpenState={ setToastOpen }
openState={ toastOpen.open }
/>
<Component {...pageProps} />
</React.Fragment>
)
}
有什么方法可以直接导入 setToastOpen
方法,并在需要时使用它?
1条答案
按热度按时间wgx48brx1#
react有一个名为context api的特殊功能,使用该功能,您可以跳过传递到组件中的道具链。。
我建议您查看下面的参考资料,以了解上下文api-
https://reactjs.org/docs/context.html
https://www.freecodecamp.org/news/react-context-in-5-minutes
contextapi示例
为上下文创建一个单独的文件
Toast-context.js
,您可以使用任何您想要的名称。现在在
App.js
使用toastcontextprovider组件 Package 组件所需的文件只需在所需的任何组件中使用usecontext钩子导入上下文。你不需要用你的衣服包起来
<ToastContextProvider>
在每个组件中。只需使用usecontext钩子,就可以看到状态和调用函数方法来更改状态。另外,请务必参考上述链接以了解有关上下文api的更多信息。非常感谢。