3***@qq.com
3***@qq.com
  • 发布:2024-12-05 15:54
  • 更新:2024-12-11 10:49
  • 阅读:99

【报Bug】uniapp vue3项目 h5 全局混入页面生命周期onLoad执行时机异常

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 4.36

手机系统: Android

手机系统版本号: Android 15

手机厂商: 华为

手机机型: mate20X

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

main页面
import App from './App';

// #ifndef VUE3
import Vue from 'vue';
import './uni.promisify.adaptor';
Vue.config.productionTip = false;
App.mpType = 'app';
const app = new Vue({
...App
});
app.$mount();
// #endif

// #ifdef VUE3

let mixin = {
onLoad(options) {
console.log('=== vue3 mixin onload');
}
};
import { createSSRApp } from 'vue';
export function createApp() {
const app = createSSRApp(App);
app.mixin(mixin);
return {
app
};
}
// #endif

index.vue页面

<template>
<view class="content"></view>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app';
onLoad(() => {
console.log('=== 组合式api onLoad');
});
</script>
<script>
export default {
onLoad() {
console.log('=== 选项式api onLoad');
}
};
</script>

预期结果:

=== vue3 mixin onload
=== 组合式api onLoad
=== 选项式api onLoad

实际结果:

=== 组合式api onLoad
=== vue3 mixin onload
=== 选项式api onLoad

bug描述:

vue3 h5项目,全局混入onLoad,正确的执行顺序应该是先执行混入的onLoad方法,再执行页面的onLoad方法,但是结果正好相反。

进一步测试发现,只有组合式api写法,onLoad执行时机异常,选项式api写法没问题。
我在同一个页面,同时使用了两种写法,打印结果如下:

=== 组合式api onLoad
=== vue3 mixin onload
=== 选项式api onLoad

2024-12-05 15:54 负责人:DCloud_UNI_OttoJi 分享
已邀请:
锦鲤丶接单丶

锦鲤丶接单丶 - 锦鲤丶接单丶18560000860丶10+年开发经验

生命周期就是组合是api最先执行

  • 3***@qq.com (作者)

    你的截图表示setup最先触发,不代表setup中的onLoad等其他生命周期最先触发。另外和我的问题无关。


    无论是选项式还是组合式,混入中的onLoad都应该在他们前面触发,否则混入中的onLoad根本毫无意义。

    2024-12-06 10:04

DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

你反馈 onload 生命周期不一样,其他生命周期是否正常,比如 mounted,create,是都有问题,还是只有 onload 有问题,缩小下问题反馈

  • 3***@qq.com (作者)

    回复图片看楼下

    排查了onLoad、onShow、mounted、created,组合式api没有created周期,打印日志如图,生命周期极其混乱,其中mixin created打印了9次、mixin onShow打印了两次,=== mixin mounted打印了9次

    2024-12-10 09:05

  • 3***@qq.com (作者)

    进一步测试,从上一个页面通过navigateBack回来,onShow触发顺序也有问题,顺序如下


    === 组合式api onShow

    === vue3 mixin onShow

    === 选项式api onShow

    2024-12-11 10:50

3***@qq.com

3***@qq.com (作者)

排查了onLoad、onShow、mounted、created,组合式api没有created周期,打印日志如图,生命周期极其混乱,其中mixin created打印了9次、mixin onShow打印了两次,=== mixin mounted打印了9次

3***@qq.com

3***@qq.com (作者)

进一步测试,从上一个页面通过navigateBack回来,onShow触发顺序也有问题,顺序如下

=== 组合式api onShow
=== vue3 mixin onShow
=== 选项式api onShow

要回复问题请先登录注册