vue3使用的一些总结

114 阅读4分钟
  1. ref(支持所有类型),reactive(ts泛型约束,只支持引用类型object,Array,Map,Set)
  2. ref与shallowRef不要一起使用,容易产生赋值错误。

image.png 4. ref取值,赋值都需要加.value,reactive是不需要.value. 5. 自定义ref(customRef)如下:

image.png 7. reactive (proxy)不能直接赋值,负责破坏响应式对象。解决方案:数组可以使用push加解构或添加一个对象,数组作为这个对象的一个属性去解决。 8. shallowReactive也是浅层修改对象属性,更深层次无法改变值,可以通过triggerRef触发更新机制。 9. toRef()两个参数(对象,该对象某个属性)只能修改响应式对象的值,非常响应式试图毫无变化。应用场景:useRefDemo(toRef(obj,obj.property) 10. toRefs可以去解构响应式reactive的值。 11. toRaw可以去改变响应式数据为原始对象。 12. computed用于某些依赖做一些计算。 13. v-memo vue3.2新增的指令要是可以缓存 期望的类型是个数组any[],该指令需要传入一个固定长度的依赖值数组进行比较。如果数组里的每个值都与最后一次的渲染相同,那么他的更新将会被跳过,甚至虚拟 DOM 的 vnode 创建也将被跳过,提升了性能。配合v-for 属于最常见的情况,但是只有助于大数据量的情况例如(1000条以上) 14. watch(三个参数)可以对ref或reactive的值做监听,当需要深度监听时reactive数据不需要加deep:true,立即执行增加immediate:true,组件执行之前增加flush: 'pre',组件执行之后plush: 'post',组件同步执行plush: 'sync',ref需要加。如果需要监听某个对象的属性,watch第一个参数可以通过函数返回需要监听的属性值 15. 生命周期 没有beforeCreate, created这两个周期,setup语法糖去代替。onBeforeMount读取不到dom,onMounted读取到dom. 16. defineProps 用于父子组件传递,如果ts的话可以用withDefaults(defineProps({}),{property: 默认值})声明默认值。子组件可以通过defineExporse()暴露给父组件一些东西,给父组件事件传值方法:defineEmits([]),如果ts的话

image.png

  1. 局部组件与全局组件,全局组件可以在main.js里通过component(组件名称,组件)注册全局。
  2. 自定义hooks使用vueuse丰富的自定义hooks库(也可以作为性能优化一种方式)。
  3. tab切换:路由,v-show,component如下:(解决了警告提示_skip_,节约了渲染性能)

image.png 16. 插槽v-slot:组件名,简写#组件名(匿名。具名)

image.png 17. 动态插槽

image.png 18. 异步组件&代码分包&suspense(应用场景:骨架渲染)如下:注意(异步组件加载必须使用suspense内置组件括起来,使用插槽方式渲染组件,fallback:加载前,default:加载后),代码分包(凡是import函数引入的都会做代码拆解,利用异步组件加载方式可以做一些性能优化,比如首页加载速度)

image.png 19. Teleport vue3新特性,可以将模版代码渲染到任何一个制定的dom节点,但让其不受父级的影响。(两个属性disabled,to(接受元素选择器class,id,标签选择器等)) 20. keep-alive内置组件用于缓存组件包含属性includes,demo如下:(只缓存A组件),max属性缓存组件数量(通过算法活跃度高的组件缓存),开启keep-alive缓存后增加两个声明周期(onActivated,onDeactivated)后onMounted只执行一次,onActivated执行多次。

image.png

image.png 21. transition动画内置组件包含name属性,生命周期8个。

image.png 22. transition-group过度列表组件包含tag属性指定列表父级外层元素,其余基本跟transition组件一致。如下:

image.png 23. provide,inject提供依赖注入实现深度嵌套组件之间数据传递(子组件也可以修改父和爷的值)。

image.png

image.png 24. nextTick更新数据如下:

image.png 25. unocss原子化css可以减少css体积大小,提高复用性,减少起名复杂度。

image.png 26. webworker,海量数据虚拟列表方式加载。 27. proxy代理解决跨域如下:

image.png

image.png 28. pinia数据状态管理(优点:action可以直接修改state,没有模块化概念,书写更简洁)

image.png

image.png

image.png

image.png

image.png

image.png

image.png 28. vue-router(hash,history,导航守卫)

image.png 29. 自定义指令directive

image.png 30. 插槽样式:slotted(class名),全局选择器(:global(选择器)),动态css(样式value使用v-bind(变量)),