我目前正在使用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