Vue3
composition API
setup
export default {
setup() {
const prop = ref('')
const fn = () => {
}
return { prop, fn }
}
}语法糖
ref、reactive等
ref
可以获取dom
<div ref="dom">我是DOM</dov> <script setup> //必须跟上面的名字一样 const dom = ref() console.log(dom.value) </script>isRef、shallowRef...
reactive
shallowReactive
script里不需要再使用value
<script setup lang="js"> let obj = reactive({a: '1'}) const handleChangeObj = () => { //以下非响应式 obj = reactive({...obj, b: '2'}) obj = {...obj, b: '2'} //以下响应式 obj.b = '2' Object.assign(obj, {b: '2'}) } </script>
以上两个区别
ref支持所有类型,reactive引用类型(Array、Object、Map、Set、Function...)
ref取值或复制都需要加value,reactive不需要
reactive通过proxy实现,不能直接赋值,否则破坏响应式
数组通过push加解构
arr.push[...res]reactive添加一个对象,把数组作为一个属性去解决
reactive是对象的话可以使用Object.assign
toRef全家桶
toRef
只能修改响应式对象的值,非响应式视图毫无变化
toRefs
解构响应式对象时使用
toRaw
computed
watch
watchEffect
key-diff解析
为什么要虚拟DOM

Vue3响应式简易实现
Vue2 使用的是Object.defineProperty(), Vue3 Proxy
Object.defineProperty()只能设置提前设置好的值,新增需要$set,数组是重写额7个原型方法,修改某一项值是无法劫持


生命周期

组件
父传子defineProps
子传父
defineExpose
递归组件
动态组件
slot
匿名插槽
具名插槽
作用域插槽(父组件获取子组件数据)
动态插槽
内置组件
异步组件+Suspense
Teleport
keep-alive
transition

自定义类名,可结合第三方类库,比如Animite.css
duration=50 or duration="{enter:50,leave:500}"
8个生命周期,可结合gsap
appear 首次动画
transition-group过渡列表
其他用法同transition
多一个v-move类
平移过渡
状态过渡
provide/inject

兄弟组件传参
通过父组件
EventBus
v-model
在Vue3 v-model 是破坏性更新的
v-model在组件里面也是很重要的
v-model 其实是一个语法糖 通过props 和 emit组合而成的
默认值的改变
prop:value -> modelValue 事件:input -> update:modelValue v-bind 的 .sync 修饰符和组件的 model 选项已移除 新增 支持多个v-model 新增 支持自定义 修饰符 Modifiers
Directive
自定义指令
Vue3指令的钩子函数
created 元素初始化的时候 beforeMount 指令绑定到元素后调用 只调用一次 mounted 元素插入父级dom调用 beforeUpdate 元素被更新之前调用 update 这个周期方法被移除 改用updated beforeUnmount 在元素被移除前调用 unmounted 指令被移除后调用 只调用一次
Vue2指令 bind inserted update componentUpdated unbind
在
mounted和updated时触发相同行为,而不关心其他的钩子函数
自定义Hooks
主要用来处理复用代码逻辑的一些封装
Vue2里面是Mixins
除了生命周期,组件的data、methods、filters会覆盖mixins里的同名data、methods、filters
全局函数、变量
css Style
属性穿透
插槽选择器
全局选择器
动态css
css module
others
TSX(学React写法)
Last updated