我正在努力对组件进行一些更新。我知道我不应该在州内设置道具。但是,我必须这样做才能使组件正确更新:

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,只要您的组件尚未按预期运行。

10-07 22:46