iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
Modern Web

React應用記錄誌系列 第 24

Day24 Redux -Immer優化reducer

  • 分享至 

  • xImage
  •  

定義Reducers時主要規則之一是reducer不能改變原始狀態值,為了不改變原始狀態值並更新新的狀態值,使用 JavaScript 的擴展運算符(…state)返回陣列的新副本而不是改變原始陣列的方法,複製現有狀態值只更新必要的屬性。但在實際應用中,嵌套狀態(nested levles state)會變得複雜難以處理。

 const { id,data} = action.payload;
     return{
          ...state, list:[
              ...state.list,
                  {
                     id:id,
                     data:data
                  }
               ]
            }
            

default:return state;        
    }  

我們可以使用 Immer,它提供了一個名為produce的函數,接受兩個參數:原始state和回調函數。回調函數被賦予該狀態的“草稿”副本,在回調函數中將action.payload指定給草稿數據,簡化了處理不可變的數據結構。

使用方法:

1.	npm install  immer
2.	import produce from immer’

3. produce(currentState, (draftState) => void): nextState

將return下巢狀狀態值更改為


Return  produce(state,(draft)=>{

   draft.list.data = action.payload
})
    default:{
       return state
    }

produce函數包含二個參數:
1.currentState
2.回調函數,回調函數中的draft屬性,根据 currentState 生成的草稿状態,它是 currentState 的代理,对 draftState 所做的任何修改都将被记录并用于生成 nextState ,將action.payload指定給draftState,生成的最终状态。


上一篇
Day23 Redux Thunk Middleware
下一篇
Day25 MERN Stack - 1
系列文
React應用記錄誌31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言