Vue3 综合知识点
Posted 沿着路走到底
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue3 综合知识点相关的知识,希望对你有一定的参考价值。
Vue3 比 Vue2 有什么优势?
性能更好
体积更小
更好的 TS 支持
更好的代码组织
更好的逻辑抽离
更多新功能
描述 Vue3 生命周期
Options API 生命周期
beforeDestroy 改为 beforeUnmount
destroyed 改为 unmounted
其他沿用 Vue2 的生命周期
Composition API 生命周期
// 等于 beforeCreate 和 created
setup() {
console.log('setup')
onBeforeMount(() => {
console.log('onBeforeMount')
})
onMounted(() => {
console.log('onMounted')
})
onBeforeUpdate(() => {
console.log('onBeforeUpdate')
})
onUpdated(() => {
console.log('onUpdated')
})
onBeforeUnmount(() => {
console.log('onBeforeUnmount')
})
onUnmounted(() => {
console.log('onUnmounted')
})
},
如何看待 Composition API 和 Options API?
composition API
更好的代码组织
更好的逻辑复用
更好的类型推导
如何理解 ref、toRef 和 toRefs?
ref
生成值类型的响应式数据
可用于模板和 reactive
通过 .value 修改值
ref 还可以用于获取 DOM元素
<template>
<p>ref demo {{ageRef}} {{state.name}}</p>
</template>
<script>
import { ref, reactive } from 'vue'
export default {
name: 'Ref',
setup() {
const ageRef = ref(20) // 值类型 响应式
const nameRef = ref('双越')
const state = reactive({
name: nameRef
})
setTimeout(() => {
console.log('ageRef', ageRef.value)
ageRef.value = 25 // .value 修改值
nameRef.value = '双越A'
}, 1500);
return {
ageRef,
state
}
}
}
</script>
获取DOM元素
<template>
<p ref="elemRef">我是一行文字</p>
</template>
<script>
import { ref, onMounted } from 'vue'
export default {
name: 'RefTemplate',
setup() {
const elemRef = ref(null)
onMounted(() => {
console.log('ref template', elemRef.value.innerhtml, elemRef.value)
})
return {
elemRef
}
}
}
</script>
toRef
针对一个reactive 封装的响应式对象的属性,创建一个 ref,具有响应式
两者保持引用关系
<template>
<p>toRef demo - {{ageRef}} - {{state.name}} {{state.age}}</p>
</template>
<script>
import { ref, toRef, reactive } from 'vue'
export default {
name: 'ToRef',
setup() {
const state = reactive({
age: 20,
name: '双越'
})
const age1 = computed(() => {
return state.age + 1
})
// // toRef 如果用于普通对象(非响应式对象),产出的结果不具备响应式
// const state = {
// age: 20,
// name: '双越'
// }
const ageRef = toRef(state, 'age')
setTimeout(() => {
state.age = 25
}, 1500)
setTimeout(() => {
ageRef.value = 30 // .value 修改值
}, 3000)
return {
state,
ageRef
}
}
}
</script>
toRefs
将 reactive 封装的响应式对象转换为普通对象
对象的每个属性都是对应的 ref
两者保持引用关系
<template>
<p>toRefs demo {{age}} {{name}}</p>
</template>
<script>
import { ref, toRef, toRefs, reactive } from 'vue'
// toRefs 可以把一个响应式对象中的属性也转换成响应式的。
// toRefs 要求传入的参数必须是一个代理对象。
// toRefs 原理:内部会创建一个新的对象,遍历传入的代理对象的所有属性,
// 把所有属性的值都转换成响应式对象,
// 并且属性是一个对象,具有 value 属性,在模板中使用,可以将value省略,但是在代码中不能省略。
export default {
name: 'ToRefs',
setup() {
const state = reactive({
age: 20,
name: '双越'
})
const stateAsRefs = toRefs(state) // 将响应式对象,变成普通对象
// const { age: ageRef, name: nameRef } = stateAsRefs // 每个属性,都是 ref 对象
// return {
// ageRef,
// nameRef
// }
setTimeout(() => {
state.age = 25
}, 1500)
return stateAsRefs
}
}
</script>
ref、toRef 和 toRefs 的最佳使用方式
用 reactive 做对象的响应式,用 ref 做值类型响应式
setup 中返回 toRefs(state),或者 toRef(state, 'xxx')
ref 的变量名都用 xxxRef
合成函数返回响应式对象时,使用 toRefs
为何需要 Ref ?
返回值类型,会丢失响应式
如在 setup、computed、合成函数,都有可能返回值类型
Vue 如不定义 ref,用户将自造 ref,反而混乱
Vue3 升级了哪些重要的功能?
Composition API 如何实现代码逻辑复用?
Vue3 如何实现响应式?
watch 和 watchEffect 的区别是什么?
setup 中如何获取组件实例?
Vue3 为何比 Vue2 快?
Vite 是什么?
Composition API 和 React Hooks 的对比
1
以上是关于Vue3 综合知识点的主要内容,如果未能解决你的问题,请参考以下文章
Vue3官网-高级指南(十七)响应式计算`computed`和侦听`watchEffect`(onTrackonTriggeronInvalidate副作用的刷新时机`watch` pre)(代码片段