3***@qq.com
3***@qq.com
  • 发布:2020-11-18 09:59
  • 更新:2020-11-29 14:22
  • 阅读:1702

【报Bug】【严重BUG】uni vue3的watch方法的BUG

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

第三方开发者工具版本号: 1.03.2011111

基础库版本号: 最新

项目创建方式: CLI

CLI版本号: 2.0.0-alpha-29520201023001

示例代码:

问题1的复现代码

import { watch } from 'vue';  
export default {  
    props: {  
        visible: {  
            type: Boolean,  
            required: true  
        }  
    },  
    setup(props) {  
        watch(  
            () => props.visible,  
            (bool) => {  
                console.log(bool);  
            }  
        );  
    }  
};

问题2复现代码

const num = ref(0);  

setInterval(() => {  
    num.value++;  
}, 1000);  

const test = computed(() => num.value > 1);  

watch(test, (bool) => {  
    console.log(bool);  
});

操作步骤:

如代码示例

预期结果:
  • 问题1预期:watch只执行一次

  • 问题2预期:数据能被watch到

实际结果:
  • 问题1会在每次数据修改的时候,watch被触发

  • 问题2完全无法被watch

bug描述:

uni中的watch存在bug

  • 父子传值,子组件无法watch数据变化(不管是ref,reactive,data,依旧无法watch变化)
  • computed后的值,依赖值变化,但是computed值不变的情况下,watch该computed值,会不断触发
2020-11-18 09:59 负责人:DCloud_UNI_FXY 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

问题和代码写反了吧?

  1. computed 返回值未变化时仍触发 watch 是 vue3.0.0 的问题
    相关问题:https://github.com/vuejs/vue-next/issues/2231
    该问题需升级至 vue3.0.2 来修复
    目前你可以手动替换编译器里的uni-mp-vue/dist/vue.runtime.esm.js为
    https://github.com/dcloudio/uni-app/blob/dev/packages/uni-mp-vue/dist/vue.runtime.esm.js
  2. 子组件watch props.visible 不触发的问题未重现,可以发一个测试工程
  • 3***@qq.com (作者)

    已经按照您的指示替换了文件,但是两个问题依旧存在


    测试工程上周已经发给你们的程序员,里面有所有的复现例子

    2020-11-23 10:03

  • DCloud_UNI_FXY

    回复 3***@qq.com: 之前的文件地址发错了,两个问题都修复了替换:https://github.com/dcloudio/uni-app/blob/dev/packages/uni-mp-vue/dist/vue.runtime.esm.js

    2020-11-29 14:21

该问题目前已经被锁定, 无法添加新回复