• vue3笔记2


    目录

    生命周期钩子

    自定义hook函数

    toRef

    其它Composition API

    1.shallowReactive 与shallowRef

    2.readonly 与shallowReadonly

    3.toRaw与markRaw

    toRaw

    markRaw

    4.customRef

    5.provide 与inject

    6.响应式数据的判断

    Composition API的优势

    1.options API存在的问题

    2.composition API的优势

    新的组件

    1.Fragment

    2.Teleport

    3.suspense

    其他

    1.全局API的转移

     2.其他改变


    生命周期钩子

    Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名:

    • beforeDestroy改名为beforeUnmount
    • destroyed改名为unmounted

    Vue3.0也提供了Composition API形式的生命周期钩子,与Vue2.x中钩子对应关系如下:
    beforeCreate===> setup()
    created=======> setup()
    beforeMount ===> onBeforeMount
    mounted=======> onMounted
    beforeUpdate ===> onBeforeUpdate
    updated =======> onUpdated

    beforeUnmount===>onBeforeUnmount

    unmounted======> onUnmounted

    自定义hook函数

    • 什么是hook?——本质是一个函数,把setup函数中使用的Composition APl进行了封装。
    • 类似于vue2.x中的mixin。
    • 自定义hook的优势:复用代码,让setup中的逻辑更清楚易懂。

    1. import{reactive,onMounted,onBeforeUnmount} from 'vue'
    2. export default function (){
    3. //实现鼠标“打点”相关的数据
    4. let point=reactive({
    5. x:0,
    6. y:0
    7. })
    8. //实现鼠标“打点”相关的方法
    9. function savePoint(event){
    10. point.x=event.pageX
    11. point.y=event.pageY
    12. console.log(event.pageX,event.pageY)
    13. }
    14. //实现鼠标“打点”相关的生命周期钩子
    15. onMounted(()=>{
    16. window.addEventListener('click',savePoint)
    17. })
    18. onBeforeUnmount(() => {
    19. window.removeEventListener('click',savePoint)
    20. })
    21. return point
    22. }

    toRef

    • 作用:创建一个ref 对象,其value值指向另一个对象中的某个属性值。。语法:const name = toRef(person , ' name ')
    • 应用:要将响应式对象中的某个属性单独提供给外部使用时。
    • 扩展:toRefs 与toRef功能一致,但可以批量创建多个ref对象,语法: toRefs(person)


    其它Composition API

    1.shallowReactive 与shallowRef

    • shallowReactive:只处理对象最外层属性的响应式(浅响应式)。
    • shallowRef:只处理基本数据类型的响应式,不进行对象的响应式处理。
    • 什么时候使用?
    1. 如果有一个对象数据,结构比较深,但变化时只是外层属性变化===>shallowReactive。
    2. 如果有一个对象数据,后续功能不会修改该对象中的属性,而是生新的对象来替换===>shallowRef。
       

    2.readonly 与shallowReadonly

    • readonly:让一个响应式数据变为只读的(深只读)。
    • shallowReadonly:让一个响应式数据变为只读的(浅只读)。
    • 应用场景:不希望数据被修改时。
       

    3.toRaw与markRaw

    toRaw

    • 作用:将一个由reactive生成的响应式对象转为普通对象。
    • 使用场景:用于读取响应式对象对应的普通对象,对这个普通对象的所有操作,不会引起页面更新。

    markRaw

    • 作用:标记一个对象,使其永远不会再成为响应式对象。
    • 应用场景:
    1. 有些值不应被设置为响应式的,例如复杂的第三方类库等。
    2. 当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能。

    1. let person = reactive({name:'张三',
    2. age:18,
    3. job:{
    4. j1:{
    5. salary: 20}
    6. }})
    7. function showRawPerson(){
    8. const p = toRaw(person)
    9. console.log(P)
    10. }

    4.customRef

    • 作用:创建一个自定义的ref,并对其依赖项跟踪和更新触发进行显式控制。
    • 实现防抖效果