vue3 的组合Api
setup函数值组合API的入口函数
1:使用ref只能定义简单类型的变化,不能监听复杂类型的变化(对象/数组)
2:在组合API中,如果想定义方法,不用定义到methods中,直接定义即可
3:在组合API中定义的变量/方法,要想在外面使用,必须通过return暴露出去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <script> import {ref} from 'vue' export default { name: 'App' , setup(){ // 入口函数 // 1. 使用 ref 只能定义基本类型的变化,不能监听复杂类型的变化(对象/数组) // 这个变量发生改变之后,Vue会自动更新UI let count = ref(0); // 2. 在组合 API 中,如果想定义方法,不用定义到 methods 中,直接定义即可 function myFn(){ count.value += 1; } // 3. 注意点: // 在组合 API 中定义的变量/方法,要想在外面使用,必须通过 return 暴露出去 return { count, myFn } } } </script> |
4:使用reactive来监听(对象/数组)的变化
<script> import {reactive} from 'vue' export default { name: 'App', setup(){ // 入口函数 // 1. 使用 reactive 定义(对象/数组) let state = reactive({ stus:[ {id:1, name:"zs", age:10}, {id:2, name:"ls", age:20}, {id:3, name:"ww", age:30}, ] }); // 2. 改变其中的一个值,其会相应变换 function changeStus(){ state.stus[0].age += 1 } return {state, changeStus} } } /* 1. 什么是reactive? - reactive 是 Vue3中提供的实现响应式数据的方法 - 在 Vue2中响应式数据是通过defineProperty来实现的 而在Vue3中响应式数据是通过 ES6 中的 Proxy 来实现的 - 本质:就是将传入的数据包装成一个 Proxy 对象 2. reactive 注意点: - reactive 参数必须是对象(json/arr) - 如果给 reactive 传递了其他对象 + 默认情况下修改对象,界面不会自动更新 + 如果想更新,可以通过重新赋值的方式 */ </script>
5:可以把一个个数据和操作组合到一个函数,并方法哦setup输出
1 <script> 2 import {reactive} from 'vue' 3 export default { 4 name: 'App', 5 setup(){ 6 // 入口函数 7 8 // 只需要在这里引入进来就行了 9 let {state, changeStus} = change() 10 11 return {state, changeStus} 12 } 13 } 14 15 // 在外面定义一个业务逻辑单元(类似类,有数据和操作) 16 function change(){ 17 // 1. 使用 reactive 定义(对象/数组) 18 let state = reactive({ 19 stus:[ 20 {id:1, name:"zs", age:10}, 21 {id:2, name:"ls", age:20}, 22 {id:3, name:"ww", age:30}, 23 ] 24 }); 25 26 // 2. 改变其中的一个值,其会相应变换 27 function changeStus(){ 28 state.stus[0].age += 1 29 } 30 31 return {state, changeStus} 32 } 33 </script>
6:把业务逻辑单元放到js中,然后导入
// changJS.js // 在外面定义一个业务逻辑单元(类似类,有数据和操作) function change(){ // 1. 使用 reactive 定义(对象/数组) let state = reactive({ stus:[ {id:1, name:"zs", age:10}, {id:2, name:"ls", age:20}, {id:3, name:"ww", age:30}, ] }); // 2. 改变其中的一个值,其会相应变换 function changeStus(){ state.stus[0].age += 1 } return {state, changeStus} } export default change
// app.vue import change from './changeJS' <script> import {reactive} from 'vue' export default { name: 'App', setup(){ // 入口函数 // 只需要在这里引入进来就行了 let {state, changeStus} = change() return {state, changeStus} } } </script>
7:Composition api 的本质(组合API/注入API)
本质:从setup中暴露的数据,会注入到option api的methods中
// app.vue
import ref from 'vue' <script> import {reactive} from 'vue' export default { name: 'App', data(){ return { // num:18 这是被注入的数据 } }, methods:{ // changeNum(){ 这是被注入的方法 // this.num += 1 // } } setup(){ // 入口函数 // 从这里暴露的数据和方法,会注入到上面的 data 和 methods 中 let num = ref(18) function changeNum(){ num += 1 } return {num, changeNum} } } </script>
8:setup执行(注入)时机,在beforeCreate和create之间
由于在执行setup函数的时候,还没有执行created生命周期方法,所以在setup函数中是无法使用data和methods的
由于不能在setup函数中使用data和methods所以vue为了避免错误使用,直接将setup函数中的this修改成了undefined
setup函数只能是同步的不能是异步的(不能在函数前面家async)
佳物不独来,万物同相携。
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决