当我们将一个redux商店传递给道具并将该道具再次设置为反应状态时,我们会复制吗?

时间:2018-06-09 04:26:37

标签: javascript reactjs redux react-redux state

这是每个REACT开发人员最常见的事情....如果我们想使用我们拥有的商店信息来创建属性对象,我们使用redux store维护应用程序模型使用subscription(connect()方法)mapStateToProps创建克隆的只读版本的存储对象以响应PROP。由于可访问属性是只读的,因此我们继续创建另一个实例来使用setState()来响应相同对象的状态(使其可写),这是同一对象的另一个克隆版本。我们最终创建了同一个对象的多个版本,奇怪的是我们可以继续改变这三个对象中的任何一个而不知道它可能是一个真正的破坏.....我们有什么方法可以防止这种情况吗? ......如果是这样,它确实有助于提高性能并防止克隆对象的恶作剧。

2 个答案:

答案 0 :(得分:0)

在反应道具和国家不应该被混淆。如果它管理得当,它不会引起任何混淆问题,但如果我们可以在渲染时使用相同的道具值,则无法使用克隆道具来说明。所以是的,没有必要将props复制到state,因为两个触发器中的更改都会重新呈现。

答案 1 :(得分:0)

setState方法用于更改本地状态,而redux(使用actions和reducers)用于更改全局状态。通常情况下,正如您所说,存储这两种情况,因此我们保持两个状态同步。但两者都没有指向同一个对象,并且创建的本地状态不可写。它也是不可变的。

考虑到redux state(global),它们仅使用actions和reducers进行更改。突变任何状态,直接反应是反模式。 redux状态只能被读取而不能被改变。当地的州也不应该直接变异。应该仅使用setState方法更改

现在针对您的问题,如果redux状态作为prop传递,则redux状态的更改将自动重新呈现组件。但是开发人员通常会将redux状态的克隆(不同对象)设置为本地状态,因为重新渲染对于本地状态来说很快,但是对本地状态的更改不会自动复制到redux状态。