Javascript 反应本机接收新道具,组件将接收道具

Javascript 反应本机接收新道具,组件将接收道具,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我正在努力更新我的组件。我知道我不应该在美国境内设置道具。但是,我必须这样做才能正确更新组件: componentWillReceiveProps(nextProps) { this.setState({ doctor: nextProps.data.name, address: nextProps.data.address }) } 有更好的方法吗?如果我这样做,这是最好的方法-> componentWillReceiveProps(nextProp

我正在努力更新我的组件。我知道我不应该在美国境内设置道具。但是,我必须这样做才能正确更新组件:

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

但是我的工作做得不太好。c

这是一个猜测。在我看来,您在正确实现
shouldComponentUpdate
时遇到了一些问题。我相信您会尝试比较
nextrops.data
对象,并且总是有不相等的结果,即使其中的数据相等。原因是对象对
数据的引用不同。为了克服这个问题,您应该做一个深入的比较,类似于的


如评论中所述,更新
组件中的下一步操作将接收道具是一个可怕的想法。

在您的评论中,您提到:

当我回到列表视图时,我不喜欢的项目仍然存在 还有一件东西不见了

这看起来是一个完全不同领域的问题。我猜您在列表中使用了错误的
键。可能是索引。键对于所显示的项目应始终是唯一的,而索引不是唯一的(例如,第一个项目始终是索引0,当您重新排列列表或删除第一个项目时,另一个项目将具有索引0,并且react无法正常工作)

关于“正确更新组件”:

  • 如果传入新道具,react会自动使用新道具重新渲染。您不需要在组件willreceiveprops中执行任何操作
  • 组件将接收道具
    用于更新状态,基于新旧道具的比较。(例如,如果要显示道具中的“喜欢”数是增加了还是减少了)
  • shouldComponentUpdate
    是可选的。主要目的是在不改变组件工作方式的情况下提高性能:告诉react early组件没有改变。我建议不要包括
    shouldComponentUpdate
    ,只要您的组件尚未按预期工作
不要从组件内部更改道具,这就是状态的目的……为什么需要将道具置于状态?你在变异它们吗?当组件中使用的道具发生更改时,React将重新渲染任何组件@独特211,该应用程序具有ListView,其中存储了一些最喜爱的项目,当我返回ListView时,我通过另一个组件(例如详细信息项目)对我所做的项目不利,而另一个项目消失了。当我使用componentWillReceiveProps并用新的props更新状态时,它就起作用了。“我希望这是有意义的。”加布里埃尔·洛佩斯——很有趣。我明白你的意思。但我只是觉得有一个更大的潜在问题。如果列表视图具有项目列表,并且它们呈现项目视图。当然,将不利事件冒泡到列表组件并允许列表组件改变列表,然后重新呈现所有项目是有意义的那只是我的想法我明白你想做什么。这对我来说似乎很复杂。谢谢,我明白了,谢谢我会看一看,可能是像往常一样愚蠢的事情,我也会看一看lodash。你找到解决这个问题的办法了吗?我被困在一个类似的问题上。我正在尝试设置组件内部的状态WillReceiveProps。我明白了,我会再看一次组件,也许我看错地方了,谢谢。