前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文读懂Vue3生命周期的应用

一文读懂Vue3生命周期的应用

原创
作者头像
QGS
发布2024-01-16 00:01:37
2422
发布2024-01-16 00:01:37
举报
文章被收录于专栏:QGS星球QGS星球

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码

创建期:beforeCreate、created

挂载期:beforeMount 、mounted

更新期:beforeUpdate、updated

销毁期:beforeUnmount 、unmountd

代码语言:java
复制
<script>
export default{
beforeCreate(){
 console.log("创建之前")
},
created(){
 console.log("创建之后")
},
beforeMount(){
 console.log("挂载之前")
},
mounted(){
 console.log("挂载之后")
},
beforeUpdate(){
 console.log("更新之前")
},
updated(){
 console.log("更新之后")
},
beforeUnmount(){
 console.log("销毁之前")
},
unmountd(){
 console.log("销毁之后")
}
}
</script>

应用场景

组件的生命周期是非常重要的,常见的应用场景:

1、 通过ref获取元素DOM结构

2、 axios网络请求渲染数据

ref获取元素DOM结构

使用ref 属性,挂载结束后引用会暴露在$refs.

代码语言:javascript
复制
<template>
  <!--
  创建期:beforeCreate、created
  挂载期:beforeMount 、mounted
  更新期:beforeUpdate、updated
  销毁期:beforeUnmount 、unmountd
  -->
  <p ref="life">组件生命周期</p>
 
 </template>
 
 <script>
  export default{
  mounted(){
  console.log(this.$refs.life)
  }
  }
 </script>

axios网络请求渲染数据

Axios,是一个基于promise 的网络请求库,作用于node.js和浏览器中,它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.js http模块, 而在客户端 (浏览端) 则使用XMLHttpRequest。

项目下安装axios依赖

yarn add axios

组件引用

代码语言:javascript
复制
import axios from 'axios'

CompnentLife.vue

代码语言:javascript
复制
<template>

    <!--

     创建期:beforeCreate、created

     挂载期:beforeMount 、mounted

     更新期:beforeUpdate、updated

     销毁期:beforeUnmount 、unmountd

     -->

    <p ref="life">组件生命周期</p>

     <p v-for="(info,index) in dataInfo" :id="index">{{info}}</p>

</template>



<script>

import axios from 'axios'

     export default{

          data(){

               return{

                       dataInfo: []

        }



          },

          mounted(){

               console.log(this.$refs.life);

               axios({

                       method:"get",

                       url:"http://localhost:8007/OS/getOSInfo",

               // changeOrigin:true  允许跨域

            }).then(res=>{

                       console.log(res.data)

                       this.dataInfo=res.data;

            })

          }

     }

</script>

效果

vue全局绑定axios

代码语言:javascript
复制
// import './assets/main.css'



import { createApp } from 'vue'

             import App from './App.vue'

//引入

             import Item from './components/Item.vue'

             import axios from 'axios'



     axios.defaults.baseURL = "http://localhost:8007"

             const app =createApp(App);

//全局挂载axios

     app.config.globalProperties.$axios=axios



//注入 (展示名,注入名)

app.component("Item",Item)

             app.mount('#app');

CompnentLife.vue

代码语言:javascript
复制
<script>
import axios from 'axios'
export default{
 data(){
 return{
 dataInfo: []
        }
    },
 mounted(){
 console.log(this.$refs.life);
 axios({
 method:"get",
 url:"/OS/getOSInfo",
 // changeOrigin:true  允许跨域
            }).then(res=>{
 console.log(res.data)
 this.dataInfo=res.data;
            })
        }
}
</script>

可能遇到问题

Access to XMLHttpRequest at 'http://localhost:8007/OS/getOSInfo' from origin 'http://localhost:5173' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

解决办法1

后端加上@CrossOrigin 注解//表示都允许跨域访问

代码语言:javascript
复制
@CrossOrigin //表示都允许跨域访问

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 应用场景
    • ref获取元素DOM结构
      • axios网络请求渲染数据
        • 组件引用
      • vue全局绑定axios
        • 可能遇到问题
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档