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

如何在Redux中更新特定数组项内的单个值

钮边浩
2023-03-14
问题内容

我遇到的问题是,状态的重新呈现会导致ui问题,并建议仅更新reducer内的特定值以减少页面上的重新呈现量。

这是我的状态的例子

{
 name: "some name",
 subtitle: "some subtitle",
 contents: [
   {title: "some title", text: "some text"},
   {title: "some other title", text: "some other text"}
 ]
}

我目前正在这样更新

case 'SOME_ACTION':
   return { ...state, contents: action.payload }

其中action.payload是包含新值的整个数组。但是现在我实际上只需要更新内容数组中第二个项目的文本,这样的事情就行不通了

case 'SOME_ACTION':
   return { ...state, contents[1].text: action.payload }

action.payload现在我需要更新的文本在哪里。


问题答案:

您可以使用React不变性助手

import update from 'react-addons-update';

// ...

case 'SOME_ACTION':
  return update(state, { 
    contents: { 
      1: {
        text: {$set: action.payload}
      }
    }
  });

虽然我想您可能会做更多这样的事情?

case 'SOME_ACTION':
  return update(state, { 
    contents: { 
      [action.id]: {
        text: {$set: action.payload}
      }
    }
  });


 类似资料:
  • 问题内容: 我有一个待办事项列表,如果用户单击“完成”,希望将数组中该项目的状态设置为“完成”。 这是我的动作: 这是我的减速器: 我遇到的问题是新状态在所选项目上不再具有与该待办事项相关的文本,并且ID不再存在。这是因为我要覆盖状态并忽略以前的属性吗?我的对象项onload看起来像这样: 如您所见,我要做的就是将完成值设置为true。 问题答案: 您需要转换待办事项数组以更新适当的项目。Arra

  • 问题内容: 我的文档中具有以下结构: 我想更新 someField 和 someField2, 但仅更新数组中的一项,与 _arrayId 匹配的 项 (例如;并且仅针对此文档(例如)),而不更新其他项。 该 arrayIds 是不是唯一的,这就是为什么我需要它是针对特定文档的文档。如果要为数组中存在的每个文档更新该值,则可以使用,但这不是我想要的。 我试图在Java中完成此操作,但也可以使用命令

  • 问题内容: 比方说,我已经有一个数组的是。我希望对象的所有字段在一行中都为“ false ”而不循环。那可能吗? 问题答案: 您只需要使用方法迭代数组并使用数组索引来更新其element属性:

  • 问题内容: 我想更新一个数组值,但我不确定要执行的正确方法,因此我尝试了以下方法,但没有为我工作。 我的模型,我模型中的子域 我的查询 谁能给我帮助。谢谢。 问题答案: 你不能同时使用 ,并 在相同的更新表达式作为嵌套的运营商。 使用更新运算符的正确语法如下: 在那里可以来自任何指定的更新列表运营商的位置。 要将一个新元素添加到数组中,只需一个 运算符即可,例如,您可以使用 update方法将修改

  • 我试图更新嵌套数组中的对象,下面是我的状态示例。我试图在目标内更新对象,我成功地更新了对象。 但是 每次我更新任何对象。索引0处的对象将获得所有对象的副本。我更新的次数越多,它就会创建更多的副本,它们就会嵌套在索引0处的对象中。 索引0处的对象也将使用任何对象的最新更新进行更新。 keyName=列表中对象的索引。(位于“0”和“1”上方的两个值:{) 此外,如果你知道任何好的留档或规范化的教程,

  • 问题内容: 有了Pandas中不错的索引方法,我就可以用各种方式提取数据了。另一方面,我仍然对如何更改现有DataFrame中的数据感到困惑。 在下面的代码中,我有两个DataFrames,我的目标是从第二个df的值更新第一个df中特定行的值。我该如何实现? 给 但是我怎么能做到这一点: 问题答案: 因此,首先, 大熊猫使用index更新 。当更新命令不更新任何内容时,请同时检查左侧和右侧。如果由