【问题标题】:Extending properties in a deep nested prop ImmutableJS在深度嵌套的 prop ImmutableJS 中扩展属性
【发布时间】:2016-07-01 05:53:07
【问题描述】:

我有一个接受populateKey 作为参数的函数,这个参数被传递并在我的名为 substate 的新状态中使用。子状态现在如下所示:let subState = _.get(state, "meta.populate." + populateKey);。 Immutable 中是否有任何方法可以完成相同的任务?

编辑:我现在使用了这个方法:看截图,但我得到“state.updateIn”不是一个函数。有什么理由会这样吗?

【问题讨论】:

  • 请不要发布屏幕截图 -- 发布代码。
  • 我会确保在以后的帖子中记住这一点 Jeremy :)
  • 到底是什么问题?在我看来还可以(尽管嵌套的 fromJS 似乎是多余的)。
  • 如果我可以在 Immutable 中使用像这样的括号表示法来查找我的路径,而不是完整路径,我是不安全的。我同意,这似乎很奇怪,这只是一个“临时”修复
  • 括号符号是 JS 语法,它在交给 Immutable 之前进行评估,就它而言,它只是得到一个“正常”的对象。

标签: javascript reactjs immutable.js


【解决方案1】:

Map#getIn():

// Example state
let state = Immutable.fromJS({ meta : { populate : { someKey : { some : 'value' } } } });

// Get the substate
let populateKey = 'someKey';
let subState    = state.getIn([ 'meta', 'populate', populateKey ]); // Map { "some" : "value" }

这显然假设state 是一个不可变对象,并且对它的任何更改也会作为不可变对象在您的应用中传播。

【讨论】:

  • state 也是来自一个参数,就这样写吧? state.setIn(["meta", "populate", populateKey]) ?
  • 换句话说,我不能改变函数内的状态,除非给它添加一个属性
  • 我添加了state 只是为了举例,我假设在您的实际用例中它通过了。就 Immutable 而言,您并没有真正向其添加属性,而是使用 setIn() 创建一个具有额外属性的新状态对象。
  • 所以如果我这样做 newState = state.setIn(...) state 得到更新,如果我使用 getin 状态会保持原样吗?
  • 即使我声明了一个新对象,实际状态也会更新
猜你喜欢
  • 2019-02-03
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多