為什么要?jiǎng)?chuàng)建副本state
在redux-devtools中,我們可以查看到redux下所有通過reducer更新state的記錄,每一個(gè)記錄都對(duì)應(yīng)著內(nèi)存中某一個(gè)具體的state,讓用戶可以追溯到每一次歷史操作產(chǎn)生與執(zhí)行時(shí),當(dāng)時(shí)的具體狀態(tài),這也是使用redux管理狀態(tài)的重要優(yōu)勢(shì)之一.
若不創(chuàng)建副本,redux的所有操作都將指向內(nèi)存中的同一個(gè)state,我們將無從獲取每一次操作前后,state的具體狀態(tài)與改變,若沒有副本,redux-devtools列表里所有的state都將被最后一次操作的結(jié)果所取代.我們將無法追溯state變更的歷史記錄.
創(chuàng)建副本也是為了保證向下傳入的this.props與nextProps能得到正確的值,以便我們能夠利用前后props的改變情況以決定如何render組件
采用官方提供的Immutability Helper工具中update()方法進(jìn)行數(shù)據(jù)更新(鏈接)
import update from 'react/lib/update'
function todoApp(state = initialState, action) {
switch (action.type) {
case SET_VISIBILITY_FILTER:
return update(state, {
visibilityFilter:{
d:{$set: action.filter}
}
})
default:
return state
}
}