何时使用componentWillReceiveProps生命周期方法?
我是React / Redux的新手,状态有问题。
class TrajectContainer extends React.Component { constructor(props) {
super(props);
this.state = {
trajects: props.trajects,
onClick: props.onClick
};
}
componentWillReceiveProps(nextProps) {
console.log('componentWillReceiveProps', nextProps);
this.setState(nextProps);
}
render() {
// When the componentWillReceiveProps is not present, the this.state will hold the old state
console.log('rerender', this.state);
return (<div className="col-md-6">
<h2>Trajects</h2>
<button className="btn btn-primary" onClick={this.state.onClick}>Add new Traject</button>
{this.state.trajects.map(traject => <Traject traject={traject} key={traject.name}/>)}
</div>)
}
}
const mapStateToProps = function (store) {
console.log('mapToStateProps', store);
return {
trajects: store.trajects
};
};
const mapDispatchToProps = function (dispatch, ownProps) {
return {
onClick: function () {
dispatch(addTraject());
}
}
};
export default connect(mapStateToProps, mapDispatchToProps)(TrajectContainer);
当reducer返回新状态时,组件将使用新数据重新呈现。
但是:如果删除componentWillReceiveProps函数,则render()函数将具有旧状态。
我检查了mapStateToProps中收到的数据,这是新的新状态。所以我不明白为什么我需要componentWillReceiveProps函数才能使render函数接收新数据。
难道我做错了什么?
回答:
componentWillReceiveProps
如果要使用新的props值更新状态值是必需的,则只要props值发生任何更改,都将调用此方法。
在您的情况下,为什么需要此componentWillReceiveProps方法?
因为您将props值存储在状态变量中,并像这样使用它:
this.state.KeyName
这就是为什么您需要componentWillReceiveProps
生命周期方法来用新的props值更新状态值,仅组件的props值会更新,而
。如果不更新状态,this.state
则将始终具有初始数据。
componentWillReceiveProps
如果您未在状态中存储props值并直接使用,则不需要
this.props.keyName
现在react将始终在render方法中使用更新的props值,如果props发生任何更改,它将使用新的props重新渲染组件。
根据 :
在已安装的组件接收新道具之前,将调用componentWillReceiveProps()。如果您需要更新状态以响应道具更改(例如,将其重置),则可以比较this.props和nextProps并在此方法中使用this.setState()执行状态转换。
在安装过程中,React不会使用初始道具调用componentWillReceiveProps。仅当某些组件的道具可能会更新时才调用此方法。
不要将props值存储在状态中,请直接使用this.props
和创建ui组件。
以上是 何时使用componentWillReceiveProps生命周期方法? 的全部内容, 来源链接: utcz.com/qa/425365.html