收藏
回答

使用 usingComponents 问题

问题模块 框架类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 usingComponents 微信iOS客户端 6.6.1 1.9.1

工程里面用到了 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 的操作,因为操作的是引用类型,导致这两个值都指向了一个地方。

望各位大大可以帮忙看看~

最后一次编辑于  2018-02-09  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答