工程里面用到了 redux,在配置文件的中引入 "usingComponents" 后页面数据出现了问题
"usingComponents" : {} |
mapState 中的 regionIndex 是一个数组类型
mapState(state) { const editingAddress = state.address.editingAddress; const regionList = state.address.regionList; const regionNameList = regionList.map(region => region.map(item => item.name) ); const regionIndex = state.address.regionIndex; const provinces = regionList[0] || []; const citys = regionList[1] || []; const districts = regionList[2] || []; return { editingAddress, // regionNameList, // regionList, // provinces, citys, districts, regionIndex, // hasRegion: !!( regionNameList[0] && regionNameList[0].length > 0 && regionNameList[1] && regionNameList[1].length > 0 && regionNameList[2] && regionNameList[2].length > 0 && regionIndex[0] > -1 && regionIndex[1] > -1 && regionIndex[2] > -1 ), // isUpdateView: state.address.view === state.address.views.UPDATE, // ↑ 控制地址的信息 }; }, |
const mapState = ctx.mapState; const mapStateFn = () => { const state = store.getState(); const mappedData = mapState.call(ctx, state); if (mappedData) { const diffed = diff(mappedData, ctx.data); ctx.setData(clone(diffed)); // ctx.setData(mappedData); } }; |
上面 mapStateFn 中的 mappedData 是由上面 mapState 返回的 object 对象,ctx.data 是当前页面的 data。正常情况下,ctx.data 中的 regionIndex 数据变化会比 mappedData 慢一拍,但是加入 usingComponents 后,每次操作这两个值都是一样的,导致 diffed 找不出变化数据而使页面没有发生变化。
但是对 diffed 做一个 clone 之后,就是正常表现了,所以怀疑是不是加入 usingComponents 后,setData 方法没做类似 clone 的操作,因为操作的是引用类型,导致这两个值都指向了一个地方。
望各位大大可以帮忙看看~