### 组合式API #### 拉开序幕的setup 选项式api: ```js data(){ return { name:'张三', age:18, tel:'13888888888' } }, methods:{ // 修改姓名 changeName(){ this.name = 'zhang-san' }, // 修改年龄 changeAge(){ this.age += 1 }, // 展示联系方式 showTel(){ alert(this.tel) } } ``` 在vue3的setup中可以与Data和mathods共存 冲突是按生命周期读取,一般data可以读setup,反之不能 ##### 引入插件 `npm i vite-plugin-vue-setup-extend -d` p 010 setup 语法糖 方便简单的对组件命名而不改变文件名,直接在script标签中加上name属性命名即可 set格式 ``` setup(){ //数据 //想要修改数据时页面刷新,需要定义响应式的数据 let name = 'shu' let age = '16' let tel = '181' //setup函数中this是undefind function changeName(){ name = 'uhs' } function changeAge(){ age=51 } function showTel(){ tel = '393' } //简写返回数据 //setup的返回值也可以是渲染函数 return {name,age,changeName,changeAge,showTel} } ``` vue3响应式=> ref && reactive 基本类型 && 对象类型 ##### ref ``` 姓名:{{name}} 年龄:{{age}} 修改名字 修改年龄 查看联系方式 ``` ref在js层使用数据必须.value。直接在数组名或者对象名或者变量名后 . 而不是在最底层的数据后 . reactive不用 ##### toRefs & roRef 区别是可不可以批量改造 ###### 解构赋值 从响应式对象中解构后的变量是非响应式的 `let{name ,age}=person` `let{name ,age}=toRefs(person)` ##### computed 作用:根据已有数据计算出新数据(和`Vue2`中的`computed`作用一致)。 引入知识点:双向绑定 ```vue 姓: 名: 全名:{{fullName}} 全名改为:li-si ``` 计算属性有缓存,多次调用的情况下,如果依赖属性没有改变。不会多次计算。而方法没有缓存 计算属性定义get和set就可以直接改变 ### watch - 作用:监视数据的变化(和`Vue2`中的`watch`作用一致) - 特点:`Vue3`中的`watch`只能监视以下**四种数据**: > 1. `ref`定义的数据。 > 2. `reactive`定义的数据。 > 3. 函数返回一个值(`getter`函数)。 > 4. 一个包含上述内容的数组。 解除监视,watch的返回值用cons接收,在使用后即可解除监视 1.ref定义的数据 ```vue 当前求和为:{{ sum }} 点我sum+1 ``` 2.reactive定义的数据 ```vue 情况二:监视【ref】定义的【对象类型】数据 姓名:{{ person.name }} 年龄:{{ person.age }} 修改名字 修改年龄 修改整个人 ``` 3. ```vue 情况三:监视【reactive】定义的【对象类型】数据 姓名:{{ person.name }} 年龄:{{ person.age }} 修改名字 修改年龄 修改整个人 测试:{{obj.a.b.c}} 修改obj.a.b.c ``` 4. ```vue 姓名:{{ person.name }} 年龄:{{ person.age }} 汽车:{{ person.car.c1 }}、{{ person.car.c2 }} 修改名字 修改年龄 修改第一台车 修改第一台车 修改整个车 ``` 5. ``` 情况五:监视上述的多个数据 姓名:{{ person.name }} 年龄:{{ person.age }} 汽车:{{ person.car.c1 }}、{{ person.car.c2 }} 修改名字 修改年龄 修改第一台车 修改第二台车 修改整个车 ``` ``` ``` ### 路由 以实现单页面多应用
年龄:{{ person.age }}
汽车:{{ person.car.c1 }}、{{ person.car.c2 }}