【问题标题】:react-redux: What is the difference between state.setIn() and state.set()?react-redux:state.setIn() 和 state.set() 有什么区别?
【发布时间】:2016-03-29 19:26:53
【问题描述】:

我在一些 react-redux 代码中看到了 setIn()set() 的使用:

state.setIn(...);
state.set(...);

我在这里找到了一些文档https://facebook.github.io/immutable-js/ 但不幸的是,该方法没有详细记录。

我还发现了一些其他问题:Using React's immutable helper with Immutable.js 但是这些并不能回答我的问题。

我明白,它必须做一些不可变的事情? 但是这里不可变的东西是什么? set()setIn() 有什么区别? 为什么我们需要不可变的?

【问题讨论】:

标签: javascript reactjs redux


【解决方案1】:

不可变的set 方法只设置立即属性,即对象的直接子级。 setIn 让您设置数据中任何深层节点的值。 set 只接受属性名称。 setIn 采用一组键/索引来向下到达深层嵌套的元素。

var basket = Immutable.Map({"milk":"yes", "flour":"no"});

basket = basket.set("flour", "yes");

basket = Immutable.Map({"fruits":{"oranges":"no"}, "flour":"no"});

basket = basket.setIn(["fruits", "oranges"], "yes");

getIn/setIn 方法在更新存储中的状态时非常有用,因为您可以使用通用操作并为子组件提供关键路径。他们可以调用将路径作为参数传递的操作。

【讨论】:

  • 是否可以使用设置来更改整个水果对象而不是只更改 fruits.oranges ?
  • 是的。 basket = basket.setIn(["fruits"], Immutable.fromJS({"oranges" : "yes"}));
【解决方案2】:

setsetInimmutablejs 方法之一,用于在列表或映射对象中设置数据。理解这一点的简单例子是假设你有一个这个

//注意fromJS是另一个来自immutablejs库的方法

const iniState = fromJS({
    name:null,
    friends:fromJS({
       name:null
    }),
})

在这种情况下,您需要使用最新的更新初始状态,然后您可以使用 set 和 setIn 方法。

iniState.set('name',"sibusiso Massango").setIn(['friends','name'],"Zweli Mathebula");

这是您如何使用setsetIn 方法的方法,要了解有关此的更多信息,您可以阅读此文档https://facebook.github.io/immutable-js/docs/

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 2019-09-27
    • 2019-04-29
    • 2017-01-03
    • 2019-06-21
    • 1970-01-01
    • 2018-07-16
    • 2020-01-09
    相关资源
    最近更新 更多