1

要使用不变性帮助程序更新嵌套数据,您通常会硬编码要更新的数据的路径,有时使用键变量。如果键/索引的数量(即嵌套的深度)也是可变的,你会怎么做?我正在寻找一种在给定任意长的键列表的情况下更新数据的方法。给定[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 还为时不晚。

4

1 回答 1

0

助手可以用于任意对象,而不仅仅是不可变对象。这些包括getInsetInupdateIn

看一下文档,它们非常方便,并带有示例。

const { getIn } = require('immutable');

const myDynamicPath = [0, 1, 1];
getIn({ 1: { 2: { 3: 123 }}}, [1, 2, '3'], 'ifNotSet') // 123

PS:使用数字作为键时要小心,因为它们总是对象上的字符串。另一方面,ImmutableJS(和本机 Map/Set)可以处理键中的任意类型,因此在 ImmutableJS 集合上使用时是类型严格的。因此,如果您曾经将该数据对象转换为不可变对象,如果您不注意,您可能会得到令人困惑的结果。

于 2020-12-21T11:14:09.007 回答