Vue3-01

1 - Vue3组合式API体验

通过一个简单的案例 体验Vue3新引入的组合式API

<template> <div> <button @click="add">{{ count }}</button> </div> </template> <script> export default { data() { return { count: 1 }; }, methods: { add() { this.count++; }, }, }; </script>
<script setup> import { ref } from "vue"; const count = ref(1); const add = () => { count.value++; }; </script> <template> <button @click="add">{{ count }}</button> </template>

1.代码量变少了 2.分布式维护转为集中式维护

2 - 使用creat-vue搭建Vue3项目

认识create-vue

creat-vue是Vue官方的脚手架工具,底层切换了vite(下一代前端工具链),为开发提供极速响应

1.前提环境条件

已安装16.0或更高版本的Node.js

2.创建一个Vue应用

npm create vue@latest

这一指令将会安装并执行 create-vue

3-组合式API入口-setup

  1. setup选项的执行时机? beforeCreate钩子之前 自动执行
  2. setup写代码的特点是什么?定义数据+函数 然后以对象方式return
  3. <script setup> 解决了什么问题?经过语法糖的封装更简单的使用组合式API
  4. setup中的this还指向组件实例吗? 指向undefined

4-组合式API-reactive和ref函数

reactive() 作用:接受对象类型数据的参数传入并返回一个响应式的对象

核心步骤:

复制代码
// 从vue包中导入reactive函数
import { reactive } from "vue";
// 执行函数 传入一个对象类型的参数 变量接受
const count = reactive({
  age: 18,
});
const addAge = () => {
  count.age++;
};
</script>

<template>
  <button @click="addAge">{{ count.age }}</button>
</template>

ref() 作用:接收简单类型或者对象类型的数据传入并返回一个响应式的对象

核心步骤:

复制代码
// 从vue包中导入ref函数
import { ref } from "vue";
// 执行函数 传入参数 变量接收(简单类型或者复杂类型)
const count = ref(18);
const addAge = () => {
//脚本区域修改ref产生的响应式对象数据 必须通过.value属性
  count.value++;
};
</script>

<template>
  <button @click="addAge">{{ count }}</button>
</template>

总结:

1.reactive和ref函数的共同作用是什么?

复制代码
   用函数调用的方式产生响应式数据

2.reactive VS ref ?

csharp 复制代码
   1.reactive不能处理简单类型的数据
   2.ref参数类型支持更好但是必须通过.value访问修改
   3.ref函数的内部使用依赖于reactive函数

3.在实际工作中推荐使用哪个?

csharp 复制代码
    推荐使用ref函数,更加灵

5-computed计算属性函数

计算属性基本思想和Vue2的完全一致,组合式API下的计算属性只是修改了写法

核心步骤:

1.导入computed函数

2.执行函数在回调参数基于响应式数据做计算的值,用变量接收

复制代码
// 从vue包中导入computed函数
import { computed, ref } from "vue";
// 执行函数 传入参数 变量接收(简单类型或者复杂类型)
const list = ref([1, 2, 3, 4, 5, 6, 7, 8]);
const computedList = computed(() => {
  return list.value.filter((item) => item > 2);
});
</script>

<template>
  <div>大于2的值-{{ computedList }}</div>
</template>

6-watch侦听器

基础使用侦听单个数据

复制代码
// 从vue包中导入computed函数
import { ref, watch } from "vue";
// 执行函数 传入参数 变量接收(简单类型或者复杂类型)
const age = ref(0);
// 调用watch侦听变化
watch(age, (newValue, oldValue) => {
  console.log("新值:", newValue, "输入前的值:", oldValue);
});
const add = () => {
  age.value++;
};
</script>

<template>
  <div>{{ age }}</div>
  <button @click="add">点击</button>
</template>

侦听多个数据

复制代码
// 从vue包中导入computed函数
import { ref, watch } from "vue";
const age = ref(0);
const name = ref("张三");

// 调用watch侦听变化
watch([age, name], ([newValue, oldValue], [newName, oldName]) => {
  console.log([newValue, oldValue], [newName, oldName]);
});

const add = () => {
  age.value++;
  name.value = "李四";
};
</script>

<template>
  <div>{{ age }}</div>
  <div>{{ name }}</div>
  <button @click="add">点击</button>
</template>

immedeiate

说明:在侦听起创建时立即触发回调,响应式数据发生变化之后继续执行回调

语法:

javascript 复制代码
    const count = ref(0)
    watch(count,()=>{]
    console.log('count发生了变化')
    },{
    immedeiate:true
    })
复制代码
import { ref, watch } from "vue";

const age = ref(0);

watch(
  age,() => {
    console.log("age发生了变化");
  },
  //immediate为true立即执行
  { immediate: true }
);
</script>

<template>
  <div>{{ age }}</div>
</template>

deep 默认机制:通过watch监听的ref对象默认是浅层侦听,直接修改嵌套的对象属性不会出发回调执行,需要开启deep选项

javascript 复制代码
const state = ref({ count:0 })
watch(state,()=>{
console.log("数据发生变化了"),
 { deep: true }
})

const changeState = ()=>{
state.value.count++
}

精确侦听对象的某个属性

需求:在不开启deep的前提下,侦听age的变化,只有age变化时才执行回调

7-组合式API-生命周期函数

一、Vue3中的生命周期 1、setup() : 开始创建组件,在 beforeCreate 和 created 之前执行,创建的是 data 和 method

2、onBeforeMount() : 组件挂载到节点上之前执行的函数;

3、onMounted() : 组件挂载完成后执行的函数;

4、onBeforeUpdate(): 组件更新之前执行的函数;

5、onUpdated(): 组件更新完成之后执行的函数;

6、onBeforeUnmount(): 组件卸载之前执行的函数;

7、onUnmounted(): 组件卸载完成后执行的函数;

8、onActivated(): 被包含在 中的组件,会多出两个生命周期钩子函数,被激活时执行;

9、onDeactivated(): 比如从 A 组件,切换到 B 组件,A 组件消失时执行;

10、onErrorCaptured(): 当捕获一个来自子孙组件的异常时激活钩子函数。

scss 复制代码
   
vue2           ------->      vue3
 
beforeCreate   -------->      setup(()=>{})
created        -------->      setup(()=>{})
beforeMount    -------->      onBeforeMount(()=>{})
mounted        -------->      onMounted(()=>{})
beforeUpdate   -------->      onBeforeUpdate(()=>{})
updated        -------->      onUpdated(()=>{})
beforeDestroy  -------->      onBeforeUnmount(()=>{})
destroyed      -------->      onUnmounted(()=>{})
activated      -------->      onActivated(()=>{})
deactivated    -------->      onDeactivated(()=>{})
errorCaptured  -------->      onErrorCaptured(()=>{})

总结: Vue2和Vue3钩子变化不大,beforeCreate 、created 两个钩子被setup()钩子来替代。

相关推荐
TeleostNaCl10 分钟前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
前端大卫2 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友2 小时前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理4 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻4 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
mapbar_front4 小时前
在职场生存中如何做个不好惹的人
前端
牧杉-惊蛰5 小时前
纯flex布局来写瀑布流
前端·javascript·css
一袋米扛几楼986 小时前
【软件安全】什么是XSS(Cross-Site Scripting,跨站脚本)?
前端·安全·xss
向上的车轮6 小时前
Actix Web适合什么类型的Web应用?可以部署 Java 或 .NET 的应用程序?
java·前端·rust·.net
XiaoYu20026 小时前
第1章 核心竞争力和职业规划
前端·面试·程序员