在ReactJS中显示/隐藏组件

我们现在在使用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

回答:

我提供了一个工作示例,它遵循您的第二种方法。更新组件的状态是显示/隐藏子级的首选方法。

假设您有这个容器:

<div id="container">

</div>

您可以使用现代Javascript(ES6,第一个示例)或经典JavaScript(ES5,第二个示例)来实现组件逻辑:

使用ES6显示/隐藏组件

在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'));

使用ES5显示/隐藏组件

在JSFiddle上现场试用此演示

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);

以上是 在ReactJS中显示/隐藏组件 的全部内容, 来源链接: utcz.com/qa/431449.html

回到顶部