我们现在在使用React时遇到了一些问题,但这 有点 归结于我们如何使用React的一部分。
我们应该如何显示/隐藏子组件?
这就是我们的编码方式(这只是组件的片段)…
_click: function() { if ($('#add-here').is(':empty')) React.render(<Child />, $('#add-here')[0]); else React.unmountComponentAtNode($('#add-here')[0]); }, render: function() { return( <div> <div onClick={this._click}>Parent - click me to add child</div> <div id="add-here"></div> </div> ) }
最近,我一直在阅读一些示例,例如应该沿着以下方向进行:
getInitialState: function () { return { showChild: false }; }, _click: function() { this.setState({showChild: !this.state.showChild}); }, render: function() { return( <div> <div onClick={this._click}>Parent - click me to add child</div> {this.state.showChild ? <Child /> : null} </div> ) }
我应该一直在使用那个React.render()吗?似乎停止了各种各样的事情,如shouldComponentUpdate级联到孩子和诸如e.stopPropagation…
shouldComponentUpdate
e.stopPropagation
我提供了一个工作示例,它遵循您的第二种方法。更新组件的状态是显示/隐藏子级的首选方法。
假设您有这个容器:
<div id="container"> </div>
您可以使用现代Javascript(ES6,第一个示例)或经典JavaScript(ES5,第二个示例)来实现组件逻辑:
在JSFiddle上现场试用此演示
class Child extends React.Component { render() { return (<div>I'm the child</div>); } } class ShowHide extends React.Component { constructor() { super(); this.state = { childVisible: false } } render() { return ( <div> <div onClick={() => this.onClick()}> Parent - click me to show/hide my child </div> { this.state.childVisible ? <Child /> : null } </div> ) } onClick() { this.setState(prevState => ({ childVisible: !prevState.childVisible })); } }; React.render(<ShowHide />, document.getElementById('container'));
var Child = React.createClass({ render: function() { return (<div>I'm the child</div>); } }); var ShowHide = React.createClass({ getInitialState: function () { return { childVisible: false }; }, render: function() { return ( <div> <div onClick={this.onClick}> Parent - click me to show/hide my child </div> { this.state.childVisible ? <Child /> : null } </div> ) }, onClick: function() { this.setState({childVisible: !this.state.childVisible}); } }); React.render(<ShowHide />, document.body);