2017-06-08 77 views
0

我相信我現在一直在修改我的狀態很長一段時間。我想做到以下幾點,想知道爲什麼它不工作:修改狀態和更新我的減速器的正確方法? (React/Redux)

case "SAVE_DATA_TO_PERSON" : 
     let newState = {...state, data: {start: action.payload.start, end: action.payload.end}}; 
     return newState; 

我在這裏創建一個新的對象,拿老態,並加入我的新數據。 雖然它似乎有所作爲,但它不會長時間保存數據。在發起其他行動後,這一切都消失了。我想知道爲什麼?

這是我用來做什麼的,它似乎工作:

case "SAVE_DATA_TO_PERSON" : 
     let newState = state; 
     newState.audio = {start: action.payload.start, end: action.payload.end}; 

     return newState; 

但在這裏,現在看來,我修改狀態。

我只想知道我的第一個解決方案是否是正確的,我的第二個解決方案確實在修改狀態。

+0

當然第二種方案是直接修改狀態 - 會怎樣它*不*是? –

+0

我想我以爲我已經將狀態複製到newState(作爲一個新的對象),並沒有使用引用。 –

+0

不,他們指的是同一個狀態對象。 –

回答

1

在第二個選項中,您直接修改狀態。

Reducer應該在React-Redux應用程序中更改狀態而不會改變現有狀態。

不變性是終極版的要求,因爲終極版代表你 應用狀態爲「凍結對象快照」。通過這些分散的快照,您可以保存狀態或反轉狀態,並且通常對所有狀態更改具有更多的「記帳」。 Ref

你雲可以考慮使用的和不可改變的工具/庫作爲dot-prop-immutableImmutable.js

從終極版文檔

相關文章:

http://redux.js.org/docs/recipes/reducers/ImmutableUpdatePatterns.html

相關問題