目录:

1、认识CompositionAPI

2、Setup函数的基本使用

3、Setup中数据的响应式

4、Reactive知识点补充

5、Ref知识点补充

6、setup中禁用this

7、Chrome插件 vue-devtool

 

一、认识CompositionAPI

 

函数式写法更灵活,还可以抽取代码段出来做成hook函数复用(类似uesxxx的函数)。

1c3b4727674d4926820fbad00307e633.png

219bb2d02df543c2bab8c2f9911d7187.png

5972c5458bee4814836a7f658461ed44.png 59666b7655b54a7da00fd004e1419d40.png

 

 

二、Setup函数的基本使用

(1)基本使用:

export default{

        setup(props等参数){

        return{ }

        }

}

(2)引入hooks函数:

import  usexxx  from xxxxx

export default{

        setup(props等参数){

        const {  xxx ,yyy,zzz } = usexxx()

        return{  xxx ,yyy,zzz } 或者 return{  ...usexxx() }

        }

}

82257cee0f324393ad0b0faeae33e371.png

 

c2245c6a6e444a05a51bfec8244eb87a.png

 

三、Setup中数据的响应式

template里面的响应式的ref变量会自动解包,就不用  .value来获取了。

ref/reactive都是代理

注意:

(1)reactive传入的值必须是复杂数据(比如对象,数组),ref是用简单数据也可以定义复杂数据(字符串或者数字什么的)

(2)setup里面的内容只有return的内容才会被template绑定

(3)由于reactive只能绑定复杂数据,例如下图的state,要取里面的值必须{{ state.name }},不方便,于是出现了ref

(4)这样子改值是错误的40e0eb24474b48db9c7bee82df8bc8b6.pngref还没解包。改成这样子就可以修改了e37f8e3e48a14a689dd13459a15e22b6.png

 (5)在template里面的变量解包意味着直接修改也没问题,不需要写成和setup里面的xx.value的形式。6ab5427e08754e08a26591e880cd8ab0.png

 (6)什么时候使用reactive,什么时候使用ref?

1.使用reactive的场景: 

 聚合的数据是指那些应该被放在一起统一管理的数据,如表单的用户名和密码,用在reactive里面好管理。

本地数据是指,你在本地需要先创建好,然后使用的,之后可以和其他的放开管理。fdbd10a72b6d4888a310a8d813abd51a.png

 

2.使用ref的场景: 

从网络上获取的数据,依靠reactive是改不了的,因为使用方法是musics.xxx。但是里面是空的数组,使用改不了对象,可以靠for循环在join进去。用ref的话可以直接赋值就可以了。

7b76bf90c3a74ad5aed793747e99b3af.png

 (6)关于readonly:

我们从父组件向子组件传递的一般都是reactive的数据,都是引用型数据,子组件props获取并使用以后是可以在子组件的方法里面修改props接收的值的。都是子组件这样子修改props的值会导致父组件的值也被修改。如果这个props接收的值是有很多子组件都有的。那父组件不知道是哪个子组件修改的。并且也违背了vue的单向数据流的规范。只建议子组件向父组件传递emit来修改值。readonly创建的也是响应式的。

readonly注意使用的时候括号里面的内容是对象obj,就是reactive的变量名称,readonly的左边还得取个名字。e2967d01210c4996822a0512bb5667d1.png

 

d5fdbd294e1e476bad3720235e43839c.png

setup的emit写法:e1f17458afd64ef6983f0a508acfa692.png

 readonly写法:c00402300bca49bc881ec6a1a067ccd7.png

 

 

 

da826869084d41d6b5556770882071ec.png

5e7a47c4fde2406686659245153131ee.png

7356d1c6d9714e38abc0ee4b0d56bfea.png

注意这个浅层解包的不同。 

3779ebb7624f4299b3ef1ec6f80ad97a.png 12234cfa101d4fb79b5a911a83fe985a.png

7158f494a5c54bb7950e755dd357607b.png

 

四、Reactive知识点补充

cc021226303e4e998904efdd89dcebec.png

五、Ref知识点补充

1906693e3eb742ed82f8b12753e5a300.png

0c8a7f3ea5124363a7d4fbc74640dc54.png

80721e3449d04a31b56ac7ae3b28c174.png

六、setup中禁用this

c5595867eb2e4112b59aaf5726cffc09.png

七、Chrome插件 vue-devtool

手动下载,商店下载

 f6f31790cbb347bfb3800ada01666a39.png

 

b560270bbb734fe0a1db14e60c8fd085.png

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐