title: Vue3 Composition APIs
:::info Taro v3.4.0+ 开始支持 :::
Vue3 提供了 Composition API(组合式 API) 特性,和传统的 Options API 不同,Composition API 提供了全新的编码方式 ,可以让我们更好地去组织和复用代码逻辑。
本文将会介绍 Taro 提供的一些自定义 Composition APIs。而关于 Composition API 的相关用法和内置 API 等信息,请参阅 Vue 文档:
Taro Composition APIs
Taro 内置的一些 Composition API,可以从 @tarojs/taro
包中引入使用。
例子:
```html title=”在 setup 函数中使用”
```html title="在 <script setup> 中使用"
<script setup>
import { useDidShow } from '@tarojs/taro'
useDidShow(() => console.log('onShow'))
</script>
useRouter
等同于 Taro.getCurrentInstance().router
。
```jsx title=”示例代码” // { path: ‘’, params: { … } } const router = useRouter()
### useReady
等同于页面的 `onReady` 生命周期钩子。
从此生命周期开始可以使用 `createCanvasContext` 或 `createSelectorQuery` 等 API 访问小程序渲染层的 DOM 节点。
```js title="示例代码"
useReady(() => {
const query = wx.createSelectorQuery()
})
useDidShow
页面显示/切入前台时触发。等同于 onShow
页面生命周期钩子。
```jsx title=”示例代码” useDidShow(() => { console.log(‘onShow’) })
### useDidHide
页面隐藏/切入后台时触发。等同于 `onHide` 页面生命周期钩子。
```jsx title="示例代码"
useDidHide(() => {
console.log('onHide')
})
usePullDownRefresh
监听用户下拉动作。等同于 onPullDownRefresh
页面生命周期钩子。
```jsx title=”示例代码” usePullDownRefresh(() => { console.log(‘onPullDownRefresh’) })
### useReachBottom
监听用户上拉触底事件。等同于 `onReachBottom` 页面生命周期钩子。
```jsx title="示例代码"
useReachBottom(() => {
console.log('onReachBottom')
})
usePageScroll
监听用户滑动页面事件。等同于 onPageScroll
页面生命周期钩子。
```jsx title=”示例代码” usePageScroll(res => { console.log(res.scrollTop) })
### useResize
小程序屏幕旋转时触发。等同于 `onResize` 页面生命周期钩子。
```jsx title="示例代码"
useResize(res => {
console.log(res.size.windowWidth)
console.log(res.size.windowHeight)
})
useShareAppMessage
监听用户点击页面内转发按钮(Button 组件 openType=’share’)或右上角菜单“转发”按钮的行为,并自定义转发内容。等同于 onShareAppMessage
页面生命周期钩子。
使用时,必须为页面配置 enableShareAppMessage: true
。(修改配置文件后请重新编译项目)
```html title=”page.vue”
```js title="page.config.js" {2}
export default {
enableShareAppMessage: true
}
useTabItemTap
点击 tab 时触发。等同于 onTabItemTap
页面生命周期钩子。
```jsx title=”示例代码” useTabItemTap(item => { console.log(item.index) console.log(item.pagePath) console.log(item.text) })
### useShareTimeline
监听右上角菜单“分享到朋友圈”按钮的行为,并自定义分享内容。等同于 `onShareTimeline` 页面生命周期钩子。
> 只有微信小程序支持,基础库 2.11.3 开始支持,本接口为 Beta 版本,暂只在 Android 平台支持
**使用时,必须为页面配置 `enableShareTimeline: true`。(修改配置文件后请重新编译项目)**
```html title="page.vue"
<script setup>
import { useShareTimeline } from '@tarojs/taro'
useShareTimeline(() => {
console.log('onShareTimeline')
})
</script>
```js title=”page.config.js” {2} export default { enableShareTimeline: true }
### useAddToFavorites
监听用户点击右上角菜单“收藏”按钮的行为,并自定义收藏内容。等同于 `onAddToFavorites` 页面生命周期钩子。
> 只有微信小程序支持,本接口为 Beta 版本,安卓 7.0.15 版本起支持,暂只在安卓平台支持
```jsx title="示例代码"
useAddToFavorites(res => {
// webview 页面返回 webviewUrl
console.log('WebviewUrl: ', res.webviewUrl)
return {
title: '自定义标题',
imageUrl: 'https://demo.png',
query: 'name=xxx&age=xxx',
}
})
useTitleClick
只有支付宝小程序支持。等同于
onTitleClick
页面生命周期钩子。
点击标题触发。
```jsx title=”示例代码” useTitleClick(() => console.log(‘onTitleClick’))
### useOptionMenuClick
> 只有支付宝小程序支持。等同于 `onOptionMenuClick` 页面生命周期钩子。
点击导航栏额外图标触发。
```jsx title="示例代码"
useOptionMenuClick(() => console.log('onOptionMenuClick'))
usePullIntercept
只有支付宝小程序支持。等同于
onPullIntercept
页面生命周期钩子。
下拉截断时触发。
jsx title="示例代码"
usePullIntercept(() => console.log('onPullIntercept'))