我目前正在使用react-redux和Immutable.js。我刚刚意识到,我店里的每个领域都是不可变的类型。但是,当我console.log存储,它实际上是一个对象,其中的值是不可变的类型。商店本身仍然是一个对象。为什么我的redux商店不是不可变的?
我创建一个名为configStore
的自定义功能,在这里我用compose
添加中间件,devtools,等等。然后我打电话configStore
实际创建我的商店,这需要一个空对象作为初始状态。当我CONSOLE.LOG我店里,我得到的是这样的:
Object {
keyA: Map(),
keyB: OrderedMap(),
...
}
这似乎矛盾的是我一直在做我的整个应用程序,其中选择走在全州,以获得在存储数据。例如,我会做一些事情,如(state) => state.keyA.getIn(nestedKey, furtherNestedKey)
。 getIn()
是ImmutableJS API。
这使我所担心我几个问题:
如果
state
是一个对象,如当我CONSOLE.LOG商店,怎能一成不变的与它交互?有一个非不可变的存储(其中包含不可变的数据类型),击败了使用Immutable和React-redux的目的?
该代码片段('state.keyA.getIn ...')意味着不可变**不**与外部对象交互。 –
'Immutable.js'不是使JS对象不可变的唯一方法。你也可以使用'freeze()'我认为REDX在'combineReducers'中做的事情。尽管使用immutables根本不需要。这只是帮助你保持数据的变异。 – Sulthan
@OliverCharlesworth啊。你是绝对正确的。尽管有缺点吗?我的商店是一个带有不可变类型的对象似乎不正确。 – AlanH