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()钩子来替代。

相关推荐
@小红花14 分钟前
从0到1学习Vue框架Day03
前端·javascript·vue.js·学习·ecmascript
前端与小赵17 分钟前
vue3中 ref() 和 reactive() 的区别
前端·javascript·vue.js
魔云连洲31 分钟前
Vue的响应式底层原理:Proxy vs defineProperty
前端·javascript·vue.js
专注VB编程开发20年35 分钟前
CSS定义网格的列模板grid-template-columns什么意思,为什么要用这么复杂的单词
前端·css
IT_陈寒41 分钟前
Redis性能提升50%的7个关键优化策略,90%开发者都不知道第5点!
前端·人工智能·后端
Hilaku1 小时前
深入URL和URLSearchParams:别再用正则表达式去折磨URL了
前端·javascript·代码规范
pubuzhixing1 小时前
Canvas 的性能卓越,用它解决一个棘手问题
前端
weixin_456904271 小时前
Vue.jsmain.js/request.js/user.js/store/index.js Vuex状态管理项目核心模块深度解析
前端·javascript·vue.js
伍哥的传说1 小时前
Vue 3.6 Alien Signals:让响应式性能飞跃式提升
前端·javascript·vue.js·vue性能优化·alien-signals·细粒度更新·vue 3.6新特性
永日456701 小时前
学习日记-HTML-day51-9.9
前端·学习·html