手拉手Vue3生命周期实战应用

简介: 手拉手Vue3生命周期实战应用

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


创建期:beforeCreate、created

挂载期:beforeMount 、mounted

更新期:beforeUpdate、updated

销毁期:beforeUnmount 、unmountd

<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.

<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


组件引用

import axios from 'axios'


CompnentLife.vue

<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

// 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

<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 注解//表示都允许跨域访问

@CrossOrigin //表示都允许跨域访问



后端


package com.example.domain;
import lombok.Data;
@Data
public class OsInfo {
    // cpu供应商
    private String cpuVendor;
    //  cpu名称
    private String cpuName;
    // CPU核心数
    private long cpuNum;
    // CPU总的使用率
    private String totalPercent;
    // CPU用户使用率
    private String usedPercent;
    // CPU当前等待率
    private String waitPercent;
    // CPU系统使用率
    private String sysPercent;
    //  CPU当前空闲率
    private String idlePercent;
    // 操作系统
    private String osName;
    // 系统架构
    private String osArch;
    // 服务器名称
    private String HostName;
    // 服务器IP
    private String HostAddress;
    // 项目路径
    private String userDir;
    // 操作系统信息
    private String sunDesktop;
    // jvm总内存
    private String totalMemory;
    // JVM空闲内存
    private String freeMemory;
    // Jvm已使用内存
    private String usedMemory;
    // JVM最大可用内存总数
    private String maxMemory;
    // jvm内存使用率
    private String useRate;
    // jvm内存空闲率
    private String freeRate;
    // Java版本
    private String jdkVersion;
    // jdk安装目录
    private String jdkHome;
}
目录
相关文章
|
1月前
|
JavaScript 前端开发 安全
Vue 3
Vue 3以组合式API、Proxy响应式系统和全面TypeScript支持,重构前端开发范式。性能优化与生态协同并进,兼顾易用性与工程化,引领Web开发迈向高效、可维护的新纪元。(238字)
487 139
|
6月前
|
人工智能 自然语言处理 JavaScript
通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
通义灵码基于自然语言需求,快速生成完整Vue组件。例如,用Vue 2和JavaScript实现贪吃蛇游戏:包含键盘控制、得分系统、游戏结束判定与Canvas动态渲染。AI生成的代码符合规范,支持响应式数据与事件监听,还能进阶优化(如增加启停按钮、速度随分数提升)。传统需1小时的工作量,使用通义灵码仅10分钟完成,大幅提升开发效率。操作简单:安装插件、输入需求、运行项目即可实现功能。
373 4
 通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
|
1月前
|
缓存 JavaScript 算法
Vue 3性能优化
Vue 3 通过 Proxy 和编译优化提升性能,但仍需遵循最佳实践。合理使用 v-if、key、computed,避免深度监听,利用懒加载与虚拟列表,结合打包优化,方可充分发挥其性能优势。(239字)
202 1
|
2月前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
363 11
|
1月前
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
243 0
|
3月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
420 1
|
3月前
|
缓存 JavaScript UED
除了循环引用,Vue3还有哪些常见的性能优化技巧?
除了循环引用,Vue3还有哪些常见的性能优化技巧?
236 0
|
4月前
|
JavaScript
vue3循环引用自已实现
当渲染大量数据列表时,使用虚拟列表只渲染可视区域的内容,显著减少 DOM 节点数量。
135 0
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
296 2
|
1月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
278 137