w***@sina.com
w***@sina.com
  • 发布:2023-03-06 14:28
  • 更新:2023-03-08 16:02
  • 阅读:439

【报Bug】vue3 script setup renderjs 数据改变时调用 callMethod 报错误

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 3.7.3

手机系统: Android

手机系统版本号: Android 12

手机厂商: 小米

手机机型: K40

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

TypeError: Cannot read properties of undefined (reading 'callMethod') at uni-app-view.umd.js:1

预期结果:

TypeError: Cannot read properties of undefined (reading 'callMethod') at uni-app-view.umd.js:1

实际结果:

TypeError: Cannot read properties of undefined (reading 'callMethod') at uni-app-view.umd.js:1

bug描述:

我这边是在每次首次登录的时候,提示这个错误,之后都是正常的

watch 监听 pinia 数据 改变的时候 变量++ 调用 renderjs 里的方法,提示 callMethod 不存在 错误如下:

TypeError: Cannot read properties of undefined (reading 'callMethod') at uni-app-view.umd.js:1

2023-03-06 14:28 负责人:无 分享
已邀请:
YUANRJ

YUANRJ

this.$ownerInstance.callMethod 是视图层调用逻辑层的方法,调用renderjs的方法具体可以看下示例

  • w***@sina.com (作者)

    我是用 watch 监听 vuex 数据变化后 响应式变量++ ,view 监听响应式变量变化后 在通过 view @renderjs.方法 来调用 ,感觉是 vuex 和 watch 已经加载完可用 但 renderjs 还没有加载完 所以才会出现首次运行时报错, 之后再改变数据就不会报错的问题.

    2023-03-08 13:44

  • w***@sina.com (作者)

    getArray(val){


    setTimeout(()=>{


    this.$ownerInstance.callMethod('onArray',this.sortable.toArray());


    }, 300);


    }


    把 renderjs 里的 方法 加上 setTimeout 就不会报错了? 请问还有其他更好的方法吗?

    2023-03-08 15:27

YUANRJ

YUANRJ

首次调用时,可能当前组件的ComponentDescriptor实例未挂载到this.$ownerInstance上,通讯时会导致报错,您可以使用以下方法

getArray(newValue, oldValue, ownerInstance) {  
    ownerInstance.callMethod('xxx')  
}
  • w***@sina.com (作者)

    好的,谢谢,我去试试,另外有一个miui14 input 兼容性的问题 type password 和 type text 来回切换时,导致页面上推错位, 我这边设置的禁止上推页面 vue app 页面

    2023-03-08 19:45

  • YUANRJ

    回复 w***@sina.com: 其它问题可以单独开贴

    2023-03-08 20:18

要回复问题请先登录注册