簡單的答案是你可以做,它只是根據你的要求。
返回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