uni-app vue3 在组合式函数中无法使用"onShareAppMessage"等回调
uni-app vue3 在组合式函数中无法使用"onShareAppMessage"等回调
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | Windows 10 22H2 | HBuilderX |
操作步骤:
结构如下:
--use
----share.js
--pages
----index
-------index.vue
// share.js
import { onShareAppMessage } from '@dcloudio/uni-app';
export function useShare() {
onShareAppMessage(({from, target, webViewUrl}) => {
console.log('onShareAppMessage', from);
return {path: 'pages/index/index'}
});
}
// index.vue
<template>
</template>
<script setup>
import { useShare } from '@/use/share.js';
useShare();
</script>
<style scoped lang="scss">
</style>
预期结果:
在用户分享页面后触发onShareAppMessage回调
实际结果:
onShareAppMessage无法触发,只有在index,js中导入onShareAppMessage,才能在share.js中触发onShareAppMessage
bug描述:
结构如下:
--use
----share.js
--pages
----index
-------index.vue
// share.js
import { onShareAppMessage } from '@dcloudio/uni-app';
export function useShare() {
onShareAppMessage(({from, target, webViewUrl}) => {
console.log('onShareAppMessage', from);
return {path: 'pages/index/index'}
});
}
// index.vue
<template>
</template>
<script setup>
import { useShare } from '@/use/share.js';
useShare();
</script>
<style scoped lang="scss">
</style>
以上代码在用户分享页面后无法触发“onShareAppMessage”回调
更多关于uni-app vue3 在组合式函数中无法使用"onShareAppMessage"等回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
参考 issue
更多关于uni-app vue3 在组合式函数中无法使用"onShareAppMessage"等回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这样做很麻烦,在vue3中使用组合式函数的本意是多个页面共用代码,结果还需要在引用组合式函数的页面中重复导入onShareAppMessage,我认为这是一个BUG
在 uni-app 中,onShareAppMessage 是微信小程序特有的生命周期函数,用于配置分享功能。在 Vue 3 的 Composition API 中,直接使用 onShareAppMessage 可能会遇到问题,因为它是一个页面生命周期钩子,而不是组件生命周期钩子。
要在 Composition API 中使用 onShareAppMessage,你可以通过以下方式来实现:
1. 在 setup 中使用 onMounted 钩子
你可以使用 onMounted 钩子来模拟 onShareAppMessage 的行为。不过,这种方式并不是直接使用 onShareAppMessage,而是通过 uni 提供的 API 来设置分享内容。
<script setup>
import { onMounted } from 'vue'
onMounted(() => {
// 使用 uni 的 API 设置分享内容
uni.showShareMenu({
withShareTicket: true,
menus: ['shareAppMessage', 'shareTimeline']
})
// 设置分享内容
uni.onShareAppMessage(() => {
return {
title: '分享标题',
path: '/pages/index/index',
imageUrl: 'https://example.com/image.png'
}
})
})
</script>
2. 使用 setup 中的 onLoad 钩子
在 uni-app 中,onLoad 是页面的生命周期钩子,你可以在 onLoad 中设置分享内容。
<script setup>
import { onLoad } from '[@dcloudio](/user/dcloudio)/uni-app'
onLoad(() => {
// 设置分享内容
uni.onShareAppMessage(() => {
return {
title: '分享标题',
path: '/pages/index/index',
imageUrl: 'https://example.com/image.png'
}
})
})
</script>
3. 使用 setup 中的 onShow 钩子
如果你希望在页面显示时设置分享内容,可以使用 onShow 钩子。
<script setup>
import { onShow } from '[@dcloudio](/user/dcloudio)/uni-app'
onShow(() => {
// 设置分享内容
uni.onShareAppMessage(() => {
return {
title: '分享标题',
path: '/pages/index/index',
imageUrl: 'https://example.com/image.png'
}
})
})
</script>
4. 直接使用 onShareAppMessage
如果你希望在 setup 中直接使用 onShareAppMessage,可以通过 uni 提供的 onShareAppMessage 方法来实现。
<script setup>
import { onMounted } from 'vue'
onMounted(() => {
// 直接使用 uni 的 onShareAppMessage 方法
uni.onShareAppMessage(() => {
return {
title: '分享标题',
path: '/pages/index/index',
imageUrl: 'https://example.com/image.png'
}
})
})
</script>
5. 使用 setup 中的 onShareAppMessage 钩子
在 uni-app 中,onShareAppMessage 是一个页面生命周期钩子,你可以在 setup 中直接使用它。
<script setup>
import { onShareAppMessage } from '[@dcloudio](/user/dcloudio)/uni-app'
onShareAppMessage(() => {
return {
title: '分享标题',
path: '/pages/index/index',
imageUrl: 'https://example.com/image.png'
}
})
</script>

