Taro v4框架开发微信小程序(页面生命周期)

每个Taro应用至少包含一个页面组件,页面组件不仅能通过Taro的路由系统实现页面间的跳转,而且能够访问并利用小程序页面的生命周期事件来处理业务逻辑。本文将重点关注几个关键的生命周期钩子函数------useLoad、useDidShow、useReady、useEffect、useUnload与useDidHide,以及它们在页面被打开和关闭时的调用顺序。

javascript 复制代码
import {useEffect} from 'react';
import {View} from '@tarojs/components'
import {useDidHide, useUnload, useDidShow, useLoad, useReady} from '@tarojs/taro'
import './index.scss'

export default function Index() {
  // 1. 页面加载完成时的回调。
  useLoad((options) => {
    console.log('useLoad')
  })
  // 2. 页面展示时的回调。
  useDidShow(() => {
    console.log('useDidShow')
  })
  // 3. 页面初次渲染完成的回调。 此时页面已经准备妥当,可以和视图层进行交互。
  useReady(() => {
    console.log('useReady')
  })
  // 4. 可以使用所有的 React Hooks
  useEffect(() => {
    console.log('useEffect')
  }, [])


  // 页面卸载时的回调。
  useUnload(() => {
    console.log('useUnload')
  })

  // 页面隐藏时的回调。
  useDidHide(() => {
    console.log('useDidHide')
  })

  return (
    <View className='index'>
      <View>
        
      </View>
    </View>
  )
}

运行代码可以看到生命周期钩子函数的执行顺序

useLoaduseLoad 是一个在页面加载时触发的钩子函数,与小程序的 onLoad 生命周期对应。这个钩子通常用于读取页面参数和初始化数据。

useDidShowuseDidShow 类似于小程序的 onShow 钩子。它在页面显示或切换到前台时被调用。可以用来刷新页面数据,或者执行一些如启动定时器的操作。

useReadyuseReady 对应于小程序的 onReady 生命周期函数。它表示页面已经准备好,DOM 结构已被创建。这个钩子适合进行一些渲染后的操作或者第三方库的初始化等。

useEffectuseEffect 是一个来自 React 的钩子函数,不是特定于 Taro 的,但在 Taro 开发中会经常使用。它可以在组件渲染到屏幕之后执行某些副作用(side effects),如数据获取、订阅或手动更改 DOM。相较于上述 Taro 特有钩子,useEffect 更加通用,可以在组件加载、更新及卸载时执行清理或执行代码。

useUnloaduseUnload 对应于小程序的 onUnload 生命周期函数,它在页面卸载时触发。可以用于执行清理工作,比如清除定时器、取消网络请求等。

useDidHideuseDidHide 对应于小程序的 onHide 生命周期函数,在页面隐藏或切换到后台时调用。可以利用这个钩子来暂停页面上一些不需要在后台运行的活动,比如视频播放。

接下来我们在终端中使用Taro CLI创建一个my页面

bash 复制代码
taro create my

index 页面中添加一个点击事件,从而触发页面跳转。关于页面跳转,在后面的章节中会详细介绍,这里只需要简单了解一下即可。

tsx 复制代码
// index页面
const onTextClick = () => {
    Taro.navigateTo({
      url: '/pages/my/index'
    })
}

<Text onClick={onTextClick}>点击我跳转到my页面</Text>

my 页面的基础结构,我们可以如下编写:

tsx 复制代码
// my页面
import { View, Text } from '@tarojs/components'
import { useLoad } from '@tarojs/taro'
import './index.scss'

export default function My() {

  useLoad(() => {
  })

  return (
    <View className='my'>
      <Text>辰火流光!</Text>
    </View>
  )
}

从index页面跳转到my页面之后再返回,我们会注意到index页面的 useDidShowuseDidHide 钩子被触发了。

如果我们将点击事件的跳转方式由 Taro.navigateTo 改为 Taro.redirectTo

javascript 复制代码
const onTextClick = () => {
  Taro.redirectTo({
    url: '/pages/my/index'
  })
}

跳转之后,index页面的 useUnload 钩子被触发,这是因为 redirectTo 会卸载当前页面,并跳转到新的页面。

相对于 navigateToredirectTo 更适用于不需要返回当前页面的场景。

对于其它钩子函数,将会在后续文章中进一步讨论。

相关推荐
换日线°22 分钟前
微信小程序三种裁剪动画有效果图
css·微信小程序
爱上python的猴子22 分钟前
chrome中的copy xpath 与copy full xpath的区别
前端·chrome
Lysun0011 小时前
dispaly: inline-flex 和 display: flex 的区别
前端·javascript·css
山禾女鬼0011 小时前
Vue 3 自定义指令
前端·javascript·vue.js
啊卡无敌1 小时前
Vue 3 reactive 和 ref 区别及 失去响应性问题
前端·javascript·vue.js
北桥苏1 小时前
Spine动画教程:皮肤制作
前端
涵信2 小时前
第九节:React HooksReact 18+新特性-React 19的use钩子如何简化异步操作?
前端·javascript·react.js
Aaaaaaaaaaayou2 小时前
浅玩一下 Mobile Use
前端·llm
这个昵称也不能用吗?2 小时前
react-native搭建开发环境过程记录
前端·react native·cocoapods
hy_花花2 小时前
Vue3.4之defineModel的用法
前端·vue.js