react-redux:state.setIn() 和 state.set() 有什么区别?

IT技术 javascript reactjs redux
2021-05-21 03:05:26

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

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

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

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

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

2个回答

不可变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在商店更新状态时,你可以使用通用的行动,并提供关键路径的子组件的方法是非常有用的。他们可以调用传递路径作为参数的动作。

set并且setInimmutablejs用于在列表或地图对象中设置数据方法之一理解这一点的简单例子是让我们说你有一个

//注意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/