工程里面用到了 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。已绑定的微信小程序,有一部份用户获取不了unionID#微信小程序开发。正常情况下,ctx.data 中的 regionIndex 数据变化会比 mappedData 慢一拍,但是加入 usingComponents 后,每次操作这两个值都是一样的,导致 diffed 找不出变化数据而使页面没有发生变化。
但是对 diffed 做一个 clone 之后,就是正常表现了,所以怀疑是不是加入 usingComponents 后,setData 方法没做类似 clone 的操作,因为操作的是引用类型,导致这两个值都指向了一个地方。
望各位大大可以帮忙看看~
本文网址:http://www.91bianli.com/kaifazhinan/71477.html