uni-app 微信小程序报错 TypeError: t.$callHook is not a function #4781

uni-app 微信小程序报错 TypeError: t.$callHook is not a function #4781

操作步骤:

使用 HBuilder X 最新 alpha 版本和 vue 3 创建一个示例小程序工程
发行打包时选择【发行为混合分包】
然后将打包后对应目录文件拷贝至已有原生微信小程序中
运行小程序,打开uni-app页面
执行 切前台/切后台 操作,观察控制台有报错

预期结果:

控制台无报错

实际结果:

控制台报错,App.onLaunch 等方法未触发

bug描述:

Vue3微信小程序,发行打包时选择【发行为混合分包】,然后将打包后对应目录文件拷贝至已有原生微信小程序中。
项目运行时,在 uni-app 页面中对小程序做 切前台/切后台 操作,控制台有报错:TypeError: t.$callHook is not a function
报错信息在源码的这个位置,vm.$callHook 为 undefined 导致的报错,初步猜测是 initCreateSubpackageApp 的 bug

信息类别 内容
产品分类 uniapp/小程序/微信
PC开发环境 Mac
操作系统版本 macOS 14.1.1 (23B81)
HBuilderX类型 正式
HBuilderX版本 3.98
工具版本号 3.0.0-3081220230817001
基础库版本 3.3.2
项目创建方式 HBuilderX

Image
Image
Image


更多关于uni-app 微信小程序报错 TypeError: t.$callHook is not a function #4781的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

HBuilderX 4.31.2024102414-alpha 已修复。

更多关于uni-app 微信小程序报错 TypeError: t.$callHook is not a function #4781的实战教程也可以访问 https://www.itying.com/category-93-b0.html


4.36版本打包支付宝小程序还是有类似问题:TypeError: Cannot read properties of undefined (reading ‘$callHook’),能麻烦看一下吗

我这边用ve3的就会爆这个错误,用vue2的没问题,项目是uni-hello,没做任何更改javascript:;

已确认bug 感谢反馈, 已加分

bug解决掉了请回复一下,辛苦大大

回复 1***@qq.com: 下个版本修复

临时解决方案:在HBuilderX安装应用的根目录下,找到plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-weixin/dist/uni.mp.esm.js 文件进行替换
tip: 快速找到HBuilderX根目录的方式,帮助–>自述文件。 然后在右键选择 ,在外部资源管理器打开,即可打开HBuilderX路径。

uni-app 开发微信小程序时,遇到 TypeError: t.$callHook is not a function 的错误,通常是由于以下几种原因导致的:

1. 生命周期钩子函数未定义或拼写错误

  • 确保你在组件或页面中正确定义了生命周期钩子函数,如 onLoad, onShow, onReady 等。
  • 检查钩子函数的拼写是否正确,大小写是否一致。
export default {
  onLoad() {
    console.log('Page loaded');
  },
  onShow() {
    console.log('Page shown');
  }
}

2. 组件或页面的 methods 中定义了与生命周期同名的方法

  • 如果你在 methods 中定义了与生命周期钩子同名的方法,可能会导致冲突。
export default {
  methods: {
    onLoad() {
      // 这会导致冲突,因为 onLoad 是生命周期钩子
      console.log('This is a method named onLoad');
    }
  }
}

3. uni-app 版本问题

  • 如果你使用的是较旧版本的 uni-app,可能会存在一些已知的 Bug。尝试升级到最新版本,看看问题是否解决。
npm install [@dcloudio](/user/dcloudio)/uni-app[@latest](/user/latest)

4. 自定义组件中未正确继承父组件的生命周期

  • 如果你在自定义组件中使用了 mixinsextends,确保你正确继承了父组件的生命周期钩子。
export default {
  mixins: [someMixin],
  onLoad() {
    console.log('Component loaded');
  }
}

5. 插件或第三方库的兼容性问题

  • 某些插件或第三方库可能会与 uni-app 的生命周期钩子冲突。尝试禁用或移除最近添加的插件,看看问题是否解决。

6. 微信开发者工具缓存问题

  • 有时微信开发者工具的缓存可能会导致一些奇怪的问题。尝试清除缓存并重新编译项目。

  • 在微信开发者工具中,点击 工具 -> 清除缓存 -> 清除所有缓存,然后重新编译项目。

7. 代码中使用了 this.$callHook

  • 如果你在代码中手动调用了 this.$callHook,确保它是在正确的上下文中调用的。$callHookuni-app 内部的 API,不建议直接使用。
// 不建议直接调用 $callHook
this.$callHook('onLoad');
回到顶部