问题标签 [immutability-helper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
952 浏览

javascript - 在 ReactJs 中更新数组中的嵌套对象

我在更新处于反应状态的数组中的嵌套对象时遇到问题。

我正在尝试根据该项目的名称比较该项目是否已经存在于该状态中。

这就是我想要发生的事情:

  1. 将商品添加到购物车。如果产品名称相同,则将数量加一。(这有效)

  2. 如果名称不同,则将该新项目添加到状态。(这也有效)

  3. 如果我回到我已经添加的上一个项目,并想再次添加它,那么我想找到该项目的状态,将其与正在传入的当前对象进行比较,并将数量更新一个。(这不起作用)

我决定实现immutability-helper来简化更新状态。

我应该注意,我正在使用 NextJs,并且仅在我重新加载新的动态页面后才会出现此问题。

希望这是足够的信息......如果需要更多信息来提供帮助,请告诉我。

提前致谢!

更新2: 这是我遇到的另一个问题......也许答案很明显,但我想我只是把它放在那里让第二组眼睛关注它(如果这应该是一个新问题,请告诉我)。

每个项目都有一些可选参数。参数是数组内的嵌套对象。我的解决方案是使用以下代码来比较数据。

但是,无论我向 productParams 添加了哪些参数,我仍然得到如下所示的相同示例输出。

有人在这里看到我的逻辑有什么问题吗?我不知道该怎么办...

更新 1:我正在添加对象结构和示例输出。

对象结构:

Chrome 开发工具的示例输出:

0 投票
1 回答
175 浏览

reactjs - ReactJS - 在 reducer 中使用 immutability-helper 的正确方法

我有以下对象,这是我在减速器中的初始状态:

我的减速器正在监听一个动作来为我的奖励对象添加奖励:

到目前为止一切都很好(尽管添加的每个对象都被命名为“问题”)......它的工作但它相当混乱。我尝试使用 immutability-helper 将上面的减速器替换为类似的东西,但是 newObh 被添加到我的状态的根目录中

0 投票
0 回答
325 浏览

typescript - immutability-helper:我可以 $set 地图中的项目但不能 $merge 它,为什么?我怎样才能 $merge 它?

使用 typescript 使用 npm 包 'immutability-helper' 修改不可变状态,我遇到了一些奇怪的错误(至少现在是这样)。我可以设置一个对象但不能合并它。你能澄清一下为什么吗?

给定以下数据:

我的目标是更新由他的密钥“gameKey”标识的游戏“更新”对象的“进度”值。如果不考虑不变性,解决方案将是:

具有不变性,我使用的解决方案是:

但我对这个解决方案并不满意,因为它迫使我为 Update 对象的每个成员提供一个值。更新只包含两个属性,所以这没什么大不了的,但如果我有 10 多个属性怎么办。不幸的是,我尝试使用 $merge 没有成功。下面的代码生成了一个编译错误,它没有让我知道出了什么问题。

编译错误:

'{ games: { [x: string]: { $merge: { progress: number; }; }; }; }' 不可分配给“Spec”类型的参数。输入'{游戏:{[x:字符串]:{$merge:{进度:数字;}; }; }; }' 不可分配给类型 '{ client?: Spec; 游戏?:规格,从不>;}'。
财产“游戏”的类型不兼容。输入 '{ [x: string]: { $merge: { progress: number; }; }; }' 不可分配给类型 'Spec,never>'。类型 '{ [x: string]: { $merge: { progress: number; 中缺少属性 '$apply' }; }; }' 但在类型 '{ $apply: (v: Map) => Map; 中是必需的 }'。

你能澄清为什么会产生这个编译错误吗?执行此合并的有效语法是什么?

谢谢

0 投票
1 回答
39 浏览

react-native - 在 React 状态下更新数组对象

我有一个状态,

我想用事件的 id 更新特定座位号的值。

0 投票
1 回答
33 浏览

javascript - 无法访问函数参数调用中的变量

我想在update函数内使用索引,但我的 IDE 提醒我index声明 nut 从未使用过。

0 投票
1 回答
281 浏览

javascript - 如何使用 Immutability-helper 进行条件更新

我需要更新嵌套对象的一些键,但是每个键是否更新都带有一些 if 条件。

目前我正在使用lodash cloneDeep()如下......它工作正常,但我想提高性能,所以我想使用immutability-helper库。

但问题在于,不变性帮助程序需要在一次更新调用中进行所有更改。所以要么我把所有这些 if 条件放在更新调用中。我什至不知道该怎么做,即使我知道,如果我有许多条件和许多要更新的键,那也会使代码非常不可读。

或者创建多个副本(每次更改 1 个)并稍后以某种方式合并它们???

是否有使用 immutability-helper 进行条件更新的正确方法?

0 投票
1 回答
117 浏览

reactjs - 如何使用不变性助手更新任意/动态嵌套数据?

要使用不变性帮助程序更新嵌套数据,您通常会硬编码要更新的数据的路径,有时使用键变量。如果键/索引的数量(即嵌套的深度)也是可变的,你会怎么做?我正在寻找一种在给定任意长的键列表的情况下更新数据的方法。给定[0, 1, 1],我想更新data[0][1][1],或者给定[9],我想更新data[9]

上下文:我有一个深度嵌套的评论数组,其中嵌套的评论是对其父级的回复,我需要根据选择的评论添加/删除/编辑评论。

看起来 Immutable.js 的方法就像我描述的那样工作:

Immutable.JS 的 get() 或 getIn() 方法……通过字符串数组[访问] 属性,每个字符串代表一个属性键。

https://redux.js.org/recipes/using-immutablejs-with-redux#difficult-to-interoperate-with

有没有用不变性助手做到这一点的好方法?如果没有,我现在切换到 Immutable.js 还为时不晚。

0 投票
1 回答
103 浏览

reactjs - React Redux 中的不变性助手

我正在学习 React-Redux,最近我发现 React 中的 Immutability Helpers,只是想知道在 React Redux Operations 中使用 Immutability Helpers 是否是一种好习惯,如果是/否,那么为什么,我感谢任何详细的解释,谢谢你。

0 投票
1 回答
24 浏览

javascript - 使用 Immutability helper js 更新对象数组中对象内的元素

我需要使用不变性助手在对象数组中添加或减去元素的值

这段代码完美无缺,这就是我想要的,除了索引

这里的数字 2 应该是索引

所以我用它来获取索引

把这个索引变量放在那里是行不通的

图片便于理解

谁能帮忙

0 投票
1 回答
48 浏览

javascript - 在 React 中使用 immutability-helper,一次更新多个值

您可以使用来自 immutability-helper 的一个更新方法调用来更新嵌套状态下的两个或多个值吗?

我尝试了下面的代码,但只[elementIndex]: {fouls: {$set: 1 }}实现了最后一行。