2 回答
TA贡献1827条经验 获得超4个赞
我建议对于您描述的情况(不同级别的不同组件需要访问某些状态并对其进行操作)使用 React context
。您还可以查看状态管理器,例如Redux
或MobX
,但在这种特殊情况下,这将是开销,因为您的应用程序不是那么“巨大”。基本上,您需要创建一些单独的文件夹(您可以将其称为context
),在其中您应该创建上下文本身,将其导出并将其包装在最上层的组件中,以便所有子级都能够使用它。
您可以在这里找到一个示例:https ://codesandbox.io/s/spring-glitter-0vzul 。
这是文档的链接: https: //reactjs.org/docs/context.html
如果您需要,我可以为您提供更多详细信息
TA贡献1829条经验 获得超6个赞
这是一个挑战,但我已经做到了!布局组件:
state = {
firstMount: false,
clicked: false,
clickedEvt: null
};
clickHandler = (event) => {
console.log('Clikced')
if (this.state.clickedEvt)
this.setState({clicked: false, clickedEvt: null});
else
this.setState({clicked: true, clickedEvt: event.target}, ()=>{setTimeout(() =>
this.setState({clicked: false, clickedEvt: null})
, 50)})
};
<LayoutContext.Provider value={{
clicked: this.state.clicked,
clickedEvt: this.state.clickedEvt,
handleClick: this.clickHandler
}}>
render() {
return(
<div onClick={(event) => this.clickHandler(event)} className="web">
首先,我从布局组件调用handleClick作为onclick事件,然后从计算器再次调用它
componentDidUpdate() {
if (this.context.clicked) {
this.clickRemoveHandler(this.context.clickedEvt)
}
}
添加回答
举报