登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
3
Star
47
Fork
23
DreamCoders
/
CoderGuide
代码
Issues
1169
Pull Requests
0
Wiki
统计
流水线
服务
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
Vue3生命周期的特点
待办的
#IAGA56
陌生人
拥有者
创建于
2024-07-29 16:19
<p>Vue3是最新版本的Vue框架,它引入了许多新的特性和改进,包括更好的TypeScript支持、Composition API、Teleport(以前称为Portals)等。本篇文章将重点介绍Vue3中的组件生命周期。</p><h2>一、钩子函数的变化</h2><p>在Vue3中,一些常见的钩子函数发生了变化。例如,vue2中的<code>created</code>和<code>beforeCreate</code>钩子函数被替换为了<code>setup()</code>,并且<code>setup()</code>在二者之前执行。<code>beforeMount</code>和<code>mounted</code>函数被替换成了<code>onBeforeMount</code>和<code>onMounted</code>。<code>beforeUpdate</code> 和<code>update</code>被替换为 <code>onBeforeUpdate</code>和<code>onupdate</code>。<code>beforeDestroy</code>和<code>destroyed</code>被替换为<code>beforeUnmount</code>和<code>unmounted</code>。这些钩子函数的执行顺序与Vue2的版本相同,但是有所不同的是,在Vue3中,它们是使用ES6类定义的。</p><h2>二、setup</h2><p><code>setup</code> 函数是一个全新的组件选项。它是 Composition API 的核心,用于初始化组件实例。</p><p><code>setup</code> 函数接收两个参数:<code>props</code> 和 <code>context</code>。其中 <code>props</code> 是父组件传递给当前组件实例的属性,而 <code>context</code> 则包含了一些 helper 方法和组件选项(如 <code>attrs</code>、<code>slots</code> 和 <code>emit</code> 等)。</p><p>在 <code>setup</code> 中,我们可以使用 Vue 3 提供的多个工具函数来定义响应式数据、监听生命周期钩子、处理计算属性、声明事件处理函数等。这些函数包括:</p><ul><li><code>reactive</code>:用于创建响应式对象</li><li><code>ref</code>:用于创建一个单一的响应式值</li><li><code>computed</code>:用于创建计算属性</li><li><code>watch</code>:用于监听响应式数据的变化</li><li><code>onMounted</code>、<code>onUpdated</code> 和 <code>onUnmounted</code>:用于监听生命周期钩子</li><li><code>toRefs</code>:用于将响应式对象转换为普通对象</li><li><code>inject</code> 和 <code>provide</code>:用于跨层级组件传递数据</li><li><code>getCurrentInstance</code>:用于访问当前组件实例</li></ul><p>使用 <code>setup</code> 函数的优点是可以将相似的逻辑组织在一起,便于代码的维护和重用。此外,<code>setup</code> 函数需要返回一个对象,用于暴露组件状态和方法给模板使用,因此也提高了代码的可读性和组件的封装性。<br>例:</p><pre><code class="language-javascript">export default { setup(props, context) { // 透传 Attributes(非响应式的对象,等价于 $attrs) console.log(context.attrs) // 插槽(非响应式的对象,等价于 $slots) console.log(context.slots) // 触发事件(函数,等价于 $emit) console.log(context.emit) // 暴露公共属性(函数) console.log(context.expose) } }</code></pre><h2>三、onBeforeMount 和 onMounted</h2><p><code>onBeforeMount</code> 和 <code>onMounted</code> 是 Vue 3 中的生命周期钩子,它们分别在组件挂载之前和之后运行。下面是两个钩子函数的使用方法:</p><h3>onBeforeMount</h3><p><code>onBeforeMount</code> 钩子函数会在组件挂载到 DOM 前运行,可以用来在组件挂载前执行一些初始化操作。</p><pre><code class="language-javascript"><script setup> import { onBeforeMount } from 'vue' onBeforeMount(() => { console.log('Before mount') }) </script></code></pre><p>在上面的例子中,我们通过 <code>onBeforeMount</code> 钩子注册了一个函数,在组件挂载前输出 <code>'Before mount'</code>。</p><h3>onMounted</h3><p><code>onMounted</code> 钩子函数会在组件挂载到 DOM 后运行,通常用于获取数据和初始化页面状态等操作。</p><pre><code class="language-javascript"><template> <div>{{ message }}</div> </template> <script setup> import { onMounted, reactive } from 'vue' const state = reactive({ message: '' }) onMounted(() => { // 发送 AJAX 请求,获取数据 fetch('/api/data') .then(res => res.json()) .then(data => { state.message = data.message }) }) </script></code></pre><p>在上面的例子中,我们通过 <code>onMounted</code> 钩子在组件挂载后发送 AJAX 请求,获取数据并更新组件状态中的 <code>message</code> 字段。</p><p>需要注意的是,在 Vue 3 中,onMounted 和 onBeforeMount 钩子需要在 setup 函数中使用。</p><h2>四、onBeforeUpdate和onUpdated</h2><p><code>onBeforeUpdate</code> 和 <code>onUpdated</code> 是 Vue 3 中的生命周期钩子函数,它们分别在组件更新之前和之后运行。下面是两个钩子函数的使用方法:</p><h3>onBeforeUpdate</h3><p><code>onBeforeUpdate</code> 钩子函数会在数据重新渲染之前运行,可以用来在组件更新前执行一些操作。</p><pre><code class="language-javascript"><script setup> import { onBeforeUpdate } from 'vue' let count = 1 onBeforeUpdate(() => { console.log('Before update', count) }) const handleClick = () => { count++ } </script> <template> <div> <p>{{ count }}</p> <button @click="handleClick">增加</button> </div> </template></code></pre><p>在上面的例子中,我们通过 <code>onBeforeUpdate</code> 钩子注册了一个函数,在每次组件更新之前输出计数器的值。同时,在方法中添加了一个按钮点击事件,用于修改计数器的值。</p><h3>onUpdated</h3><p><code>onUpdated</code> 钩子函数会在数据重新渲染后运行,通常用于更新 DOM、执行动画或获取最新的状态等操作。</p><pre><code class="language-javascript"><template> <div> <p>{{ message }}</p> <button @click="handleClick">获取最新的消息</button> </div> </template> <script setup> import { onMounted, onUpdated, ref } from 'vue' const message = ref('Hello, world!') onMounted(() => { // 模拟异步获取消息 setTimeout(() => { message.value = 'Hello, Vue 3!' }, 2000) }) onUpdated(() => { console.log('DOM updated') }) const handleClick = () => { alert(message.value) } </script></code></pre><p>在上面的例子中,我们通过 <code>onUpdated</code> 钩子在每次数据更新后输出 DOM 更新消息。同时,在方法中添加了一个按钮点击事件,用于显示最新的消息。</p><p>需要注意的是,在 Vue 3 中,onBeforeUpdate 和 onUpdated 钩子需要在 setup 函数中使用。</p><h2>五、onBeforeUnmount和onUnmounted</h2><p>当组件不再需要时,Vue3将依次执行beforeUnmount和unmounted钩子函数。beforeUnmount钩子函数在组件卸载之前被调用,通常用于清理一些事件监听器或取消一些异步任务。unmounted钩子函数在组件完全被卸载后被调用,此时,组件可以回收内存等资源。</p><h3>onBeforeUnmount</h3><p><code>onBeforeUnmount</code> 钩子函数会在组件卸载之前运行,可以用来清除定时器、取消事件监听器等操作。</p><pre><code class="language-javascript"><script setup> import { onBeforeUnmount, ref } from 'vue' const timer = ref(null) onBeforeUnmount(() => { clearInterval(timer.value) }) const startTimer = () => { timer.value = setInterval(() => { console.log('Hello, world!') }, 1000) } const stopTimer = () => { clearInterval(timer.value) } </script> <template> <div> <p>定时器示例</p> <button @click="startTimer">开始</button> <button @click="stopTimer">停止</button> </div> </template> </code></pre><p>在上面的例子中,我们通过 <code>onBeforeUnmount</code> 钩子注册了一个函数,在组件卸载之前清除定时器。同时,在方法中添加了两个按钮事件,用于启动和停止计时器。</p><h3>onUnmounted</h3><p><code>onUnmounted</code> 钩子函数会在组件卸载后运行,通常用于清理一些资源或取消订阅。</p><pre><code class="language-javascript"><template> <div> <p>{{ message }}</p> <button @click="unsubscribe">取消订阅</button> </div> </template> <script setup> import { onMounted, onUnmounted, ref } from 'vue' const message = ref('') let subscription = null onMounted(() => { // 模拟创建一个订阅 subscription = setInterval(() => { message.value = new Date().toLocaleTimeString() }, 1000) }) onUnmounted(() => { // 在组件卸载后取消订阅 clearInterval(subscription) }) const unsubscribe = () => { clearInterval(subscription) } </script></code></pre><p>在上面的例子中,我们通过 <code>onUnmounted</code> 钩子在组件卸载后清除订阅。同时,在方法中添加了一个按钮点击事件,用于取消订阅。</p><p>需要注意的是,在 Vue 3 中,onBeforeUnmount 和 onUnmounted 钩子需要在 setup 函数中使用<em><code>。</code></em></p><h2>六、总结</h2><p>Vue3引入了Composition API、Teleport等新特性,同时也改进了组件生命周期的实现方式,包括钩子函数的命名和顺序的变化。通过了解Vue3中组件生命周期的变化,开发人员可以更好地管理组件的状态、数据以及DOM操作,从而提高Vue3应用程序的性能和可维护性。总之,Vue3中的组件生命周期是一个非常重要的概念。开发人员应该熟悉Vue3的生命周期钩子函数,以便更好地编写和维护Vue3应用程序。</p>
<p>Vue3是最新版本的Vue框架,它引入了许多新的特性和改进,包括更好的TypeScript支持、Composition API、Teleport(以前称为Portals)等。本篇文章将重点介绍Vue3中的组件生命周期。</p><h2>一、钩子函数的变化</h2><p>在Vue3中,一些常见的钩子函数发生了变化。例如,vue2中的<code>created</code>和<code>beforeCreate</code>钩子函数被替换为了<code>setup()</code>,并且<code>setup()</code>在二者之前执行。<code>beforeMount</code>和<code>mounted</code>函数被替换成了<code>onBeforeMount</code>和<code>onMounted</code>。<code>beforeUpdate</code> 和<code>update</code>被替换为 <code>onBeforeUpdate</code>和<code>onupdate</code>。<code>beforeDestroy</code>和<code>destroyed</code>被替换为<code>beforeUnmount</code>和<code>unmounted</code>。这些钩子函数的执行顺序与Vue2的版本相同,但是有所不同的是,在Vue3中,它们是使用ES6类定义的。</p><h2>二、setup</h2><p><code>setup</code> 函数是一个全新的组件选项。它是 Composition API 的核心,用于初始化组件实例。</p><p><code>setup</code> 函数接收两个参数:<code>props</code> 和 <code>context</code>。其中 <code>props</code> 是父组件传递给当前组件实例的属性,而 <code>context</code> 则包含了一些 helper 方法和组件选项(如 <code>attrs</code>、<code>slots</code> 和 <code>emit</code> 等)。</p><p>在 <code>setup</code> 中,我们可以使用 Vue 3 提供的多个工具函数来定义响应式数据、监听生命周期钩子、处理计算属性、声明事件处理函数等。这些函数包括:</p><ul><li><code>reactive</code>:用于创建响应式对象</li><li><code>ref</code>:用于创建一个单一的响应式值</li><li><code>computed</code>:用于创建计算属性</li><li><code>watch</code>:用于监听响应式数据的变化</li><li><code>onMounted</code>、<code>onUpdated</code> 和 <code>onUnmounted</code>:用于监听生命周期钩子</li><li><code>toRefs</code>:用于将响应式对象转换为普通对象</li><li><code>inject</code> 和 <code>provide</code>:用于跨层级组件传递数据</li><li><code>getCurrentInstance</code>:用于访问当前组件实例</li></ul><p>使用 <code>setup</code> 函数的优点是可以将相似的逻辑组织在一起,便于代码的维护和重用。此外,<code>setup</code> 函数需要返回一个对象,用于暴露组件状态和方法给模板使用,因此也提高了代码的可读性和组件的封装性。<br>例:</p><pre><code class="language-javascript">export default { setup(props, context) { // 透传 Attributes(非响应式的对象,等价于 $attrs) console.log(context.attrs) // 插槽(非响应式的对象,等价于 $slots) console.log(context.slots) // 触发事件(函数,等价于 $emit) console.log(context.emit) // 暴露公共属性(函数) console.log(context.expose) } }</code></pre><h2>三、onBeforeMount 和 onMounted</h2><p><code>onBeforeMount</code> 和 <code>onMounted</code> 是 Vue 3 中的生命周期钩子,它们分别在组件挂载之前和之后运行。下面是两个钩子函数的使用方法:</p><h3>onBeforeMount</h3><p><code>onBeforeMount</code> 钩子函数会在组件挂载到 DOM 前运行,可以用来在组件挂载前执行一些初始化操作。</p><pre><code class="language-javascript"><script setup> import { onBeforeMount } from 'vue' onBeforeMount(() => { console.log('Before mount') }) </script></code></pre><p>在上面的例子中,我们通过 <code>onBeforeMount</code> 钩子注册了一个函数,在组件挂载前输出 <code>'Before mount'</code>。</p><h3>onMounted</h3><p><code>onMounted</code> 钩子函数会在组件挂载到 DOM 后运行,通常用于获取数据和初始化页面状态等操作。</p><pre><code class="language-javascript"><template> <div>{{ message }}</div> </template> <script setup> import { onMounted, reactive } from 'vue' const state = reactive({ message: '' }) onMounted(() => { // 发送 AJAX 请求,获取数据 fetch('/api/data') .then(res => res.json()) .then(data => { state.message = data.message }) }) </script></code></pre><p>在上面的例子中,我们通过 <code>onMounted</code> 钩子在组件挂载后发送 AJAX 请求,获取数据并更新组件状态中的 <code>message</code> 字段。</p><p>需要注意的是,在 Vue 3 中,onMounted 和 onBeforeMount 钩子需要在 setup 函数中使用。</p><h2>四、onBeforeUpdate和onUpdated</h2><p><code>onBeforeUpdate</code> 和 <code>onUpdated</code> 是 Vue 3 中的生命周期钩子函数,它们分别在组件更新之前和之后运行。下面是两个钩子函数的使用方法:</p><h3>onBeforeUpdate</h3><p><code>onBeforeUpdate</code> 钩子函数会在数据重新渲染之前运行,可以用来在组件更新前执行一些操作。</p><pre><code class="language-javascript"><script setup> import { onBeforeUpdate } from 'vue' let count = 1 onBeforeUpdate(() => { console.log('Before update', count) }) const handleClick = () => { count++ } </script> <template> <div> <p>{{ count }}</p> <button @click="handleClick">增加</button> </div> </template></code></pre><p>在上面的例子中,我们通过 <code>onBeforeUpdate</code> 钩子注册了一个函数,在每次组件更新之前输出计数器的值。同时,在方法中添加了一个按钮点击事件,用于修改计数器的值。</p><h3>onUpdated</h3><p><code>onUpdated</code> 钩子函数会在数据重新渲染后运行,通常用于更新 DOM、执行动画或获取最新的状态等操作。</p><pre><code class="language-javascript"><template> <div> <p>{{ message }}</p> <button @click="handleClick">获取最新的消息</button> </div> </template> <script setup> import { onMounted, onUpdated, ref } from 'vue' const message = ref('Hello, world!') onMounted(() => { // 模拟异步获取消息 setTimeout(() => { message.value = 'Hello, Vue 3!' }, 2000) }) onUpdated(() => { console.log('DOM updated') }) const handleClick = () => { alert(message.value) } </script></code></pre><p>在上面的例子中,我们通过 <code>onUpdated</code> 钩子在每次数据更新后输出 DOM 更新消息。同时,在方法中添加了一个按钮点击事件,用于显示最新的消息。</p><p>需要注意的是,在 Vue 3 中,onBeforeUpdate 和 onUpdated 钩子需要在 setup 函数中使用。</p><h2>五、onBeforeUnmount和onUnmounted</h2><p>当组件不再需要时,Vue3将依次执行beforeUnmount和unmounted钩子函数。beforeUnmount钩子函数在组件卸载之前被调用,通常用于清理一些事件监听器或取消一些异步任务。unmounted钩子函数在组件完全被卸载后被调用,此时,组件可以回收内存等资源。</p><h3>onBeforeUnmount</h3><p><code>onBeforeUnmount</code> 钩子函数会在组件卸载之前运行,可以用来清除定时器、取消事件监听器等操作。</p><pre><code class="language-javascript"><script setup> import { onBeforeUnmount, ref } from 'vue' const timer = ref(null) onBeforeUnmount(() => { clearInterval(timer.value) }) const startTimer = () => { timer.value = setInterval(() => { console.log('Hello, world!') }, 1000) } const stopTimer = () => { clearInterval(timer.value) } </script> <template> <div> <p>定时器示例</p> <button @click="startTimer">开始</button> <button @click="stopTimer">停止</button> </div> </template> </code></pre><p>在上面的例子中,我们通过 <code>onBeforeUnmount</code> 钩子注册了一个函数,在组件卸载之前清除定时器。同时,在方法中添加了两个按钮事件,用于启动和停止计时器。</p><h3>onUnmounted</h3><p><code>onUnmounted</code> 钩子函数会在组件卸载后运行,通常用于清理一些资源或取消订阅。</p><pre><code class="language-javascript"><template> <div> <p>{{ message }}</p> <button @click="unsubscribe">取消订阅</button> </div> </template> <script setup> import { onMounted, onUnmounted, ref } from 'vue' const message = ref('') let subscription = null onMounted(() => { // 模拟创建一个订阅 subscription = setInterval(() => { message.value = new Date().toLocaleTimeString() }, 1000) }) onUnmounted(() => { // 在组件卸载后取消订阅 clearInterval(subscription) }) const unsubscribe = () => { clearInterval(subscription) } </script></code></pre><p>在上面的例子中,我们通过 <code>onUnmounted</code> 钩子在组件卸载后清除订阅。同时,在方法中添加了一个按钮点击事件,用于取消订阅。</p><p>需要注意的是,在 Vue 3 中,onBeforeUnmount 和 onUnmounted 钩子需要在 setup 函数中使用<em><code>。</code></em></p><h2>六、总结</h2><p>Vue3引入了Composition API、Teleport等新特性,同时也改进了组件生命周期的实现方式,包括钩子函数的命名和顺序的变化。通过了解Vue3中组件生命周期的变化,开发人员可以更好地管理组件的状态、数据以及DOM操作,从而提高Vue3应用程序的性能和可维护性。总之,Vue3中的组件生命周期是一个非常重要的概念。开发人员应该熟悉Vue3的生命周期钩子函数,以便更好地编写和维护Vue3应用程序。</p>
评论 (
0
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
Vue
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (
-
)
标签 (
-
)
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)
1
https://gitee.com/DreamCoders/CoderGuide.git
git@gitee.com:DreamCoders/CoderGuide.git
DreamCoders
CoderGuide
CoderGuide
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册