2 回答

TA貢獻1827條經驗 獲得超4個贊
我建議對于您描述的情況(不同級別的不同組件需要訪問某些狀態并對其進行操作)使用 React context
。您還可以查看狀態管理器,例如Redux
或MobX
,但在這種特殊情況下,這將是開銷,因為您的應用程序不是那么“巨大”?;旧希枰獎摻ㄒ恍﹩为毜奈募A(您可以將其稱為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)
}
}
添加回答
舉報