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

更新项目数组中的单个值 反应redux

郭胤
2023-03-14
问题内容

我有一个待办事项列表,如果用户单击“完成”,希望将数组中该项目的状态设置为“完成”。

这是我的动作:

export function completeTodo(id) {
    return {
        type: "COMPLETE_TASK",
        completed: true,
        id
    }
}

这是我的减速器:

case "COMPLETE_TASK": {
             return {...state,
                todos: [{
                    completed: action.completed
                }]
             }
        }

我遇到的问题是新状态在所选项目上不再具有与该待办事项相关的文本,并且ID不再存在。这是因为我要覆盖状态并忽略以前的属性吗?我的对象项onload看起来像这样:

Objecttodos: Array[1]
    0: Object
        completed: false
        id: 0
        text: "Initial todo"
    __proto__: Object
    length: 1
    __proto__: Array[0]
    __proto__: Object

如您所见,我要做的就是将完成值设置为true。


问题答案:

您需要转换待办事项数组以更新适当的项目。Array.map是执行此操作的最简单方法:

case "COMPLETE_TASK":
    return {
        ...state,
        todos: state.todos.map(todo => todo.id === action.id ?
            // transform the one with a matching id
            { ...todo, completed: action.completed } : 
            // otherwise return original todo
            todo
        ) 
    };

有一些库可以帮助您进行这种深度状态更新。您可以在此处找到此类库的列表:https :
//github.com/markerikson/redux-ecosystem-links/blob/master/immutable-
data.md#immutable-update-utilities

就我个人而言,我使用ImmutableJS(https://facebook.github.io/immutable-
js/
)来解决其updateInsetIn方法的问题(对于具有大量键和数组的大型对象,它们和普通对象和数组相比效率更高,但对于小孩子则较慢)。



 类似资料:
  • 问题内容: 我遇到的问题是,状态的重新呈现会导致ui问题,并建议仅更新reducer内的特定值以减少页面上的重新呈现量。 这是我的状态的例子 我目前正在这样更新 其中是包含新值的整个数组。但是现在我实际上只需要更新内容数组中第二个项目的文本,这样的事情就行不通了 现在我需要更新的文本在哪里。 问题答案: 您可以使用React不变性助手 虽然我想您可能会做更多这样的事情?

  • 问题内容: 我正在使用此 libray将Android中的GoogleMap集群化。我的问题是如何更新我昨天从Google查过的单个项目,没有答案可以解释更新单个项目。我在项目中使用websocket,因此我需要更新从websocket接收到的项目数据。在下面查看我的实现。 我的概念是每当我从websocket接收数据时,就执行mClusterManager.remove(item)mCluste

  • 我有一个visualforce页面,它在线显示在Opportunity页面布局上。目标是显示与opportunity关联的每个opportunity line item(OLI),以及quantity inputfield。我需要能够从VF页面更改奥利的数量。我有一个扩展到标准opportunity controller之外的控制器,所有内容都能正确显示,但当我尝试使用自定义保存方法保存时,页面会

  • 我有一系列推车。我想更新请求对象中的产品数量。即。 我有一个数组的产品和数量,比如: 我想更新它们,如: 这可能的逻辑是什么?

  • 问题内容: 我有一个称为状态的对象数组。 说我有功能 这里的问题是,每次调用时,整个数组都会更新,因此整个DOM都将重新呈现。在我的情况下,这导致浏览器冻结,因为我几乎每秒都要调用此函数,并且有很多对象。但是,在每次通话中,实际上仅更新其中一个或两个设备。 我有什么选择? 编辑 在我的确切情况下,a 是一个定义如下的对象: 因此,数组中的每个项目都是this的特定瞬间,即我所拥有的某个地方: 我更

  • 本文向大家介绍从数组数组中返回一个数组,其中每个项目是JavaScript中相应子数组中所有项目的总和,包括了从数组数组中返回一个数组,其中每个项目是JavaScript中相应子数组中所有项目的总和的使用技巧和注意事项,需要的朋友参考一下 给定一个数组数组,每个数组包含一组数字。我们必须编写一个返回数组的函数,其中每个项目都是相应子数组中所有项目的总和。 例如- 如果输入数组是- 那么我们函数的输