vue3新特性总结(个人向-待补充)

目录

1、性能变快

    - diff算法优化:

    - 静态提升

2、vue3 安装和使用(详见官网https://v3.vuejs.org/)

3、组合API(Compostion API)

        vue3使用setup

        ref 和 reactive api

        shallowRef:

        toRaw:

4、tree shaking (摇树) 特性

5、vue3 生命周期函数

6、watch

7、响应数据的原理

8、vue3 和 vue2 比较大的区别:

9、toRefs

10、toRef


1、性能变快

    - diff算法优化:

        vue2中虚拟dom 是全量比较,

        vue3添加了静态标记,第一次生成虚拟doms时,发现有可变的虚拟dom节点(存在插值表达式)会给改虚拟dom增加flag标志 flag:1{{txt}}文本,

            后期数据变化--第二次生成虚拟dom节点---只比较之前静态标记的dom节点,没有标记的不比较,则加快了速度

    - 静态提升

        vue2中数据没有变化的dom,之后创建的时候全部重复创建

        vue3中数据没有变化的dom,直接复用,之后不重复创建

    - 事件侦听器缓存

        默认情况下onclick会被视为动态绑定,所以创建的时候每次都会去追踪它的变化,但是因为是同一个函数(存在静态标记),没有追踪它的变化,直接缓存复用

2、vue3 安装和使用(详见官网https://v3.vuejs.org/)

    - 引入 vue@next

    - 引入vite和vite-app

        vite是尤大开发的类似cli的一个脚手架,可以快速创建vue项目

        npm init vite-app [项目名称--可选(可以先不写)] ---- yarn install/npm install ---- yarn/npm dev 运行

3、组合API(Compostion API)

    - 在vue2里面做功能开发的时候,每做一个小功能,都要分散到data(定义数据) methods(处理数据)等里面,这样对于代码的复用和维护不利。

      好的思想:每一个功能的代码的数据,业务应该是组合在一起的

    - setup(详见官网https://v3.vuejs.org/)----- vue3  提供的一个新的类似生命周期的函数,执行是在之前的vue2的created之前,并且里面没办法获取this

        vue2在data里定义数据,在methods处理数据       

 例:data:function(){

                    return:{

                        a: 4,

                        list:[

                            1,

                            2,

                            3

                        ]

                    }

                },

                methods: {

                    change(){

                        this.list.push(this.a)

                    }

                }

        vue3使用setup

            1、展示数据

                --- 不做任何处理下的数据默认是不具有响应式的,既后期数据变化视图不会更新,视图变化了,模型数据也不会变化

                --- 解决方法: 实现数据响应式(双向数据绑定)=== 需要借助vue3提供的数据创建api进行数据包装处理使其成为响应式数据

                vue2 做数据响应式使用: Object.defineProperty()

                vue 3 做数据响应式使用: 使用es6的proxy对象 --- 须引入api: import { reactive , ref } from 'vue' === reactive vue3提供的函数,对对象和数组这种复合数据类型进行包装,返回一个新对象,该对象可以实现响应式; ref   vue3提供的函数,对基本数据类型进行包装,返回一个新对象,该对象可以实现响应式

            详见官网https://v3.vuejs.org/

        ref 和 reactive api

            ref包装的对象,在视图上直接使用,不需要加.value,setup里处理时需要加.value

            ref本质也是reactive,ref(obj)等价于reactive({value: obj}) 例:let age = ref(18)  底层是 let age = reactive({value:18})

            二者的区别:reactive只对对象类型有效,对基本数据类型无效

                    1、ref多用来定义基本数据类型(也可以定义对象,内部会自动通过reactive转为代理对象),而 reactive只能用来定义对象数组类型

                    2、ref操作数据需要.value,reactive操作数据不需要.value

                    3、ref通过Object.defineProperty()的get和set来实现响应式, reactive通过Proxy来实现响应式,并通过Reflect操作源对象内部的数据

        shallowRef:

            只有第一层是响应式的,即只有在更改.value的时候才能实现响应式,但是可以通过triggerRef()方法主动更新界面,实现界面刷新 例:let age = shallowRef({f:{s:{c: 3}}}) age.value.f.s.c = 'c';   triggerRef(age);--- 主动更新页面

        shallowReactive: 只有第一层是响应式的,并且没有类似triggerRef()的方法

        toRaw:

            有些时候我们不希望数据进行响应式实时更新,可以通过toRaw获取ref或reactive引用的原始数据,通过修改原始数据,不会造成界面的更新,只有通过修改ref和reactive包装后的数据时才会发生界面响应式变化。

            例:let obj1 = {...};

                //state和obj1是引用关系,state的本质是一个Proxy对象,其中引用了obj1

                let state = reactive(obj1);

                //通过toRaw方法获取到原始数据,其实是获取到obj1的内存地址,obj2和obj1是完全相等的

                let obj2 = toRaw(state)

                console.log(obj1 === obj2);//true

                复制代码

4、tree shaking (摇树) 特性

    按需引入需要的源码,减少源码文件大小,B/S加载文件的响应速度变快

    例: import { reactive , ref , isRef , isReactive } from 'vue'

5、vue3 生命周期函数

    - 名称发生了变化,api的调用方式发生了变化

        需要引入 例: import { onMounted , onUpdated} from 'vue'

        生命周期函数需要在setup里注册使用

            例: setup(){

                    onMounted(()=>{

                    })

                    onUpdated(()=>{

                       

                    })

                }

6、watch

    - 需要引入 例: import { watch} from 'vue'

        watch(number1,(neVal,oldVal)=>{

        }})

7、响应数据的原理

    - Proxy es6提供的一个api,用于代理其他对象的行为,可以拦截代理对象的set和get操作(详见es6文档)

    - vuejs底层是拦截所有的模型变量,给每个模型变量都设置get和set操作达到响应式数据的操作

8、vue3 和 vue2 比较大的区别:

    - vue3是ts改写

    - 数据劫持api Proxy

    - 组合

    - 按需导入

9、toRefs

将一个响应式对象转换为一个普通对象,这个普通对象的每个属性都是指向源对象相应属性的 ref。每个单独的 ref 都是使用 toRef() 创建的。

toRefs 在调用时只会为源对象上可以枚举的属性创建 ref。如果要为可能还不存在的属性创建 ref,请改用 toRef。

10、toRef

基于响应式对象上的一个属性,创建一个对应的 ref。这样创建的 ref 与其源属性保持同步:改变源属性的值将更新 ref 的值,反之亦然。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值