簡體   English   中英

Redux中的狀態突變

[英]State mutation in Redux

我知道,Reducer只是純函數,它們接受先前的狀態和操作,並返回新的狀態對象,而不是使先前的狀態發生變化。
但是,盡管直接突變不是Redux的理念,但還是有可能的(或者我錯過了一些東西):

 const reducer = (oldState = initialState, action) => { switch (action.type) { case "ACT": { // mutate state directly instead of create a new one oldState.subobj.ssub.key = "hi hi"; return oldState; } default: { return oldState; } } }; 

完整代碼在這里

為什么不重新執行驗證以阻止此類操作?
我們如何確保開發人員永遠不會這樣做?

Redux無法進行此類驗證,因為它不知道某個操作的新數據是否應該實際更新狀態。 Redux使用reducers,因為它不知道如何更新狀態。 這是您的業務邏輯,因此您必須提供這種狀態轉換。

Redux正在比較對象引用,這是很快的。 如果它將執行某種重復的狀態樹並以遞歸方式比較對象,則會引入性能損失。

為了確保您的開發人員沒有這樣做,我猜您最好的選擇是建立良好的開發紀律,對Reducer進行單元測試,在這些測試中使用deep-freeze庫,並在代碼審查中強制使用deep-freeze

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM