我正在努力对组件进行一些更新。我知道我不应该在州内设置道具。但是,我必须这样做才能使组件正确更新:
componentWillReceiveProps(nextProps) {
this.setState({
doctor: nextProps.data.name,
address: nextProps.data.address
})
}
有更好的方法吗?如果我这样做是最好的方法->
componentWillReceiveProps(nextProps) {
this.props.data.name = nextProps.data.name;
this.props.data.name = nextProps.data.address;
})
}
我正在尝试使用shouldComponentUpdate:
shouldComponentUpdate: function(nextProps, nextState) {
return nextProps.id !== this.props.id;
}
但是我对我来说做得不太好。
最佳答案
在您的评论中,您提到:
当我回到ListView时,我不喜欢的项目仍然存在
另一个项目不见了
在完全不同的区域中看起来像是一个问题。我的猜测是您在列表中使用了错误的key
。可能是索引。键对于您显示的项应该始终是唯一的,索引也不是唯一的(例如,第一项始终为索引0,并且当您重新排列列表或删除第一项时,另一个项的索引为0,而react不然后工作良好。)Further explanation here。
关于“正确更新组件”:
如果您传递新道具,则使用新道具自动做出反应并重新渲染。为此,您无需在componentWillReceiveProps
中执行任何操作。componentWillReceiveProps
用于根据比较旧道具和新道具来更新状态。 (例如,如果您要显示道具中喜欢的人数是上升还是下降)shouldComponentUpdate
是可选的。主要目的是在不对组件工作进行任何功能更改的情况下提高性能:尽早告知组件未更改。我建议不要使用shouldComponentUpdate
,只要您的组件尚未按预期运行。