在项目中遇到需求,需要页面跳转后 传递一个 比较大的对象,用query的方式可能导致被截取,而且字符还要转义,于是采用了 eventChannel 进行页面通讯
const u = await navigateTo(pagePathUtil.MATERIAL_SCAN)
u.eventChannel.emit("requireWorkOrder",res.data)
本来没有问题,但当需求变成了 在页面跳转后 需要操作uni-table 组件的ref 来进行勾选,页面进来后一点击复选框就会报错
[Vue warn]: Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.
大义是table组件的ref与绑定值重复导致了 页面渲染死循环,但是 这个组件根本没有提供数据绑定!
于是找了个沙盒,多次反复测试发现当使用 eventChannel
进行页面通信时才会遇到这个问题,但由于eventChannel的具体实现挺复杂 也就没有具体深究原因,
如果遇到 页面通讯后 立即使用组件ref进行操作的场景,最好不要用 eventChannel,采用状态管理组件等可能会更好一点