React parent 状态未更新
React parent state not updating
状态 showMenu 一直返回 false,它没有得到更新。
在 parent 中的 console.log 之后,state 一直返回 false,而我在函数 toggleMenu() 中明确更新它。
有人可以解释一下如何解决这个问题吗?
(另外,我如何才能将这个新状态传递回我的孩子class 以改变我的 css class 那里?)
请不要将我重定向到 Whosebug 中的相关问题,我已经检查了很多问题,但概念不太正确,因此非常感谢一个例子。提前致谢
CHILD COMPONENT
class GeneralNav extends Component {
state = {
showMenu: false
};
render() {
return (
<EasyFlexRow style="row-space-between header-nav-justify-content nav-fixed">
<div
className="nav-burger-box menu-action"
onClick={this.props.toggleMenu}
>
<div className="nav-burger-top" />
<div className="nav-burger-bottom" />
</div>
</EasyFlexRow>
);
}
}
PARENT COMPONENT
class HomePage extends Component {
state = {
showMenu: false
};
toggleMenu = e => {
e.preventDefault();
console.log(this.state.showMenu);
this.state.showMenu = false
? this.setState({ showMenu: true })
: this.setState({ showMenu: false });
};
render() {
return (
<React.Fragment>
<GeneralNav toggleMenu={this.toggleMenu.bind(this)} />
</React.Fragment>
);
}
}
this.state.showMenu = false
? this.setState({ showMenu: true })
: this.setState({ showMenu: false });
不正确,您应该使用 ===
而不是 =
进行比较,否则 this.state.showMenu = false
将始终 return 错误。所以应该是this.state.showMenu === false
。
这样使用setState
会更优雅
toggleMenu = e => {
e.preventDefault();
console.log(this.state.showMenu);
this.setState(state => ({showMenu: !state.showMenu}));
};
请注意,您可以删除 GeneralNav
中的 state = {showMenu: false};
,因为该状态已在父组件中声明。
您也可以将 toggleMenu={this.toggleMenu.bind(this)}
替换为 toggleMenu={this.toggleMenu}
,因为 toggleMenu
是使用箭头函数声明的,因此 this
将引用 class 实例
状态 showMenu 一直返回 false,它没有得到更新。
在 parent 中的 console.log 之后,state 一直返回 false,而我在函数 toggleMenu() 中明确更新它。
有人可以解释一下如何解决这个问题吗?
(另外,我如何才能将这个新状态传递回我的孩子class 以改变我的 css class 那里?)
请不要将我重定向到 Whosebug 中的相关问题,我已经检查了很多问题,但概念不太正确,因此非常感谢一个例子。提前致谢
CHILD COMPONENT
class GeneralNav extends Component {
state = {
showMenu: false
};
render() {
return (
<EasyFlexRow style="row-space-between header-nav-justify-content nav-fixed">
<div
className="nav-burger-box menu-action"
onClick={this.props.toggleMenu}
>
<div className="nav-burger-top" />
<div className="nav-burger-bottom" />
</div>
</EasyFlexRow>
);
}
}
PARENT COMPONENT
class HomePage extends Component {
state = {
showMenu: false
};
toggleMenu = e => {
e.preventDefault();
console.log(this.state.showMenu);
this.state.showMenu = false
? this.setState({ showMenu: true })
: this.setState({ showMenu: false });
};
render() {
return (
<React.Fragment>
<GeneralNav toggleMenu={this.toggleMenu.bind(this)} />
</React.Fragment>
);
}
}
this.state.showMenu = false
? this.setState({ showMenu: true })
: this.setState({ showMenu: false });
不正确,您应该使用 ===
而不是 =
进行比较,否则 this.state.showMenu = false
将始终 return 错误。所以应该是this.state.showMenu === false
。
这样使用setState
会更优雅
toggleMenu = e => {
e.preventDefault();
console.log(this.state.showMenu);
this.setState(state => ({showMenu: !state.showMenu}));
};
请注意,您可以删除 GeneralNav
中的 state = {showMenu: false};
,因为该状态已在父组件中声明。
您也可以将 toggleMenu={this.toggleMenu.bind(this)}
替换为 toggleMenu={this.toggleMenu}
,因为 toggleMenu
是使用箭头函数声明的,因此 this
将引用 class 实例