简单的答案是你可以做,它只是根据你的要求。
返回null
const displayWidget = this.state.checked ? <Widget /> : null;
这样做,这样意味着当this.state.checked
是true
那么你Widget
成分是mounted
和componentWillMount
/componentDidMount
将被调用。
然而,当this.state.checked
是false
的Widget
组件将unmount
,如果你在componentWillUnmount
功能贴console.log
,你会看到这一点。
如果this.state.checked
是true
(再次),那么你Widget
成分是mounted
(再次)和componentWillMount
/componentDidMount
将被调用(再次)。
通过CSS隐藏
我想你的代码改成这样:
const divStyle = {
visibility: 'hidden',
}
const displayWidget = <Widget style= {...this.state.checked ? {} : divStyle} />
这种方式意味着在初始render
和this.state.checked
是true
那么它将mount
以同样的方式作为空做法。
然而,当this.state.checked
是false
,unmount
是不称为组件仍然mounted
但现在简单地通过css
隐藏。
一个替代的办法来隐藏组件,但保持它安装
<Widget visible={this.state.checked} />
而在你Widget
组件的render()
方法,你可以这样做:
render() {
if (!this.props.visible) {
return null;
}
return <span>widget content</span>;
}
我会用第二只是因为当元素的值为null时,我不知道JSX插入到DOM中。如果你知道,那就去吧。 – OregonTrail
更好做:'DisplayWidget = '。 –
Andrew