当前位置: 首页 > 面试题库 >

在Redux中,是否需要进行深度复制

宋丰
2023-03-14
问题内容

下面的对象action.data有一个嵌套对象address

{
    name: 'Ben',
    address: {
        country: 'Australia',
        state: 'NSW'
    }
}

我应该如何在减速器中处理它?

const rootReducer = (state = initState, action) {
    switch(action.type) {
        switch RECEIVE_DATA:
            return {...state, data: action.data}
    }
}

我可以如上所述做吗?我只是将整个对象分配给它data而不进行复制?

要么

const rootReducer = (state = initState, action) {
    switch(action.type) {
        switch RECEIVE_DATA:
            const address = {...action.data.address}
            const data = {...action.data, address}
            return {...state, data}
    }
}

还是应该对对象进行深层复制并将其分配给data?谢谢


问题答案:

处理嵌套数据更新的“正确”方法是使用多个浅表副本,每个浅层副本一个。按照您的第一个示例,完全可以完全替换一个字段的新对象当然也可以。

有关如何正确执行不可变更新的一些信息,请参阅不可变更新模式的Redux文档部分,以及有关深度克隆的Redux FAQ条目。



 类似资料:
  • 问题内容: 是否需要进行显式的if(log.isDebugEnabled()){…}检查? 我的意思是,我已经看到一些帖子提到log.debug(“something”)进行隐式调用,以查看调试模式日志记录是否已启用,然后再进行日志记录。我是否缺少某些东西,或者在使用此步骤之前有中间步骤要执行? 谢谢! 与 编辑:在上面写过:http : //java.sg/whether-to-do-a-isd

  • 问题内容: 在redux文档中给出的示例中,似乎总是从中间件返回一些东西。但是,当我打电话不返回时,一切似乎都正常。 在redux源中,它似乎正在调用每个中间件的返回值。 这使我相信,它为所有中间件运行后提供了一种可选的方式来运行调度。 有人可以确认我们是否必须始终从中间件返回值吗?为什么? 问题答案: 我实际上是前几天在这条推文上发表的。 默认情况下,该方法返回传递的操作。由于中间件管道环绕,因

  • 问题内容: 我想在我的JavaScript代码中包含几个JSON文件,这些文件与JavaScript源文件位于同一目录中。 如果我想包含另一个JavaScript文件,可以直接使用。现在,我正在使用和获取JSON,我认为这是执行此操作的丑陋方法。 是否有类似的要求,使我能够加载JSON文件? 问题答案: 从节点v0.5.x开始,是的,您可以像需要js文件一样要求JSON。 在ES6中:

  • 我正在尝试为我的Redux项目创建一个将使用对象而不是数组的深度复制映射方法。我读到在Redux中,每个状态都不应该改变前面状态中的任何东西。

  • 在cshtml文件中,我将字符串分配给属性。例如: 自从@模特。值字符串可以包含任何Unicode字符,显然该字符串必须经过编码。Razor会自动编码这个值吗?我猜它不会或不能,因为我可以很容易地把一个@Html。Raw在它之后立即把整个事情分解成两个标记。 我想我需要做的是: 对吗? 同样,如果我在脚本的JavaScript字符串中嵌入字符串值,我应该使用:

  • 问题内容: 如果我忘记了,有时反正还是可行。但有时并非如此。 在JDBC和Android SQLite中,似乎根本不需要。我很迷惑。 我什么时候应该使用分号? 问题答案: 分号表示一条语句的结尾,因此,如果有多个语句,则应使用分号,否则它将正常工作。 我通常使用分号作为练习,即使您在sql客户端上运行查询,例如在Sql Developer中使用分号,如果在工作表上有多个语句,它也很有用,因为您可以