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

这是使用Redux删除项目的正确方法吗?

吕自怡
2023-03-14
问题内容

我知道我不应该改变输入,而应该克隆对象来改变它。我遵循在redux入门项目上使用的约定,该约定使用:

ADD_ITEM: (state, action) => ({
  ...state,
  items: [...state.items, action.payload.value],
  lastUpdated: action.payload.date
})

用于添加项目-我使用了点差将项目追加到数组中。

用于删除我使用的:

DELETE_ITEM: (state, action) => ({
  ...state,
  items: [...state.items.splice(0, action.payload), ...state.items.splice(1)],
  lastUpdated: Date.now() 
})

但这改变了输入状态对象-即使我要返回一个新对象,也禁止这样做吗?


问题答案:

不,永远不要改变你的状态。

即使您要返回一个新对象,您仍然会污染旧对象,而您从来不希望这样做。这使得在旧状态与新状态之间进行比较时会出现问题。例如shouldComponentUpdate,react-
redux在引擎盖下使用。这也使时间旅行成为不可能(即撤消和重做)。

而是使用不可变方法。永远使用Array#slice,永不Array#splice

我从您的代码中假定这action.payload是要删除的项目的索引。更好的方法如下:

items: [
    ...state.items.slice(0, action.payload),
    ...state.items.slice(action.payload + 1)
],


 类似资料:
  • 问题内容: 我能够使用三个链接来组合一个简化的完整History.js示例,以从整个页面加载内容片段,而无需更新页面和更新浏览器历史记录。 这是相关的代码段- 完整的工作示例在此处http://jsfiddle.net/PT7qx/show 我想知道这是否正确。以前的版本可以使用#url绑定到事件。我没有看到使用此最新版本将事件绑定到url的任何示例,因此我使用了.on()click事件来调用Hi

  • 我正在用AppWidgetHostViews填充RecyclerView。它们被排序一个比一个低,每个都有删除按钮旁边。这就是我如何设置RecyclerView和适配器(Event.Object是AppWidgetHostView): 这是保存AppWidgetHostViews的适配器: 因此它再次为适配器设置数据并通知数据集已更改。 但问题是,当我单击“删除”按钮时,项目没有被正确删除。Vie

  • 问题内容: 我读这个和这个,结果发现,在课堂上我需要保存到类的引用,当东西在发生类,我们执行由类的接口中定义的方法工具。好吧,我明白了。我以不同的方式使用接口来调用回调: 我发现这种方式更具可读性,更容易理解,但是不确定这是否是不好的做法。因此,我可以随意走这条路吗? 问题答案: 所以我可以随意走这条路吗? 这种方式不是很正确。 您在说的是称为Observer或/ 模式。 简而言之:订户想要从发布

  • 我读了这篇文章和这篇文章,发现在类中,我需要保存对类的引用,当类中发生一些事情时,我们执行一个由类实现的接口定义的方法。不知何故我明白了。我以不同的方式使用接口来调用回调: 我发现这种方式更易读,更容易理解,但不确定这是否是一个不好的做法。所以我可以自由地走得更远吗?

  • 本文向大家介绍Oracle删除archivelog文件的正确方法,包括了Oracle删除archivelog文件的正确方法的使用技巧和注意事项,需要的朋友参考一下 Oracle在开启了归档模式后,会在指定的archive目录下产生很多的archivelog文件,而且默认是不会定期清除的,时间长久了,该文件夹会占用很大的空间。 问题:如何定期正确删除archivelog文件呢? 很多人直接在arch

  • 本文向大家介绍SQL Server正确删除Windows认证用户的方法,包括了SQL Server正确删除Windows认证用户的方法的使用技巧和注意事项,需要的朋友参考一下 前言 在SQL Server数据库中,有时候会建立一些Windows认证的账号(域账号),例如,我们公司习惯给开发人员和Support同事开通NT账号权限,如果有离职或负责事宜变更的话,那么要如何正确的删除这些Windows