Composition API对⽐Options API

语法介绍

我们在写Vue2的时候,编写组件的⽅式是使⽤Options API,这种⽅式的特点就是在对应的属性编写对应 的功能模块,例如在 data 中定义数据、 methods 定义⽅法等;这种⽅法的弊端就是同⼀功能的代码逻辑 被拆分到各个属性中,影响代码的阅读。随着业务复杂度越来越⾼,代码量会不断的加⼤;由于相关业 务的代码需要遵循option的配置写到特定的区域,导致后续维护⾮常的复杂,代码可复⽤性也不⾼。 随着业务复杂度越来越⾼,代码量会不断的加⼤;由于相关业务的代码需遵循option的配置写到特定 的区域,导致后续维护⾮常的复杂,代码可复⽤性也不⾼。
1 显然我们可以更加优雅的组织我们的代码,函数。让相关功能的代码更加有序的组织在⼀起
2 3 语法对⽐响应式数据 在Vue3中创建响应式的数据主要是通过reactive和ref这两个API实现的,现在我们就来依次学习⼀下这两 个以及相关的API。

reactive

reactive API⽤于创建响应式的对象或者数组,实际上该⽅法的内部就是基于ES6的Proxy实现的。
如下代码展示了reactive API的⽤法:
4 5
我们使⽤ reactive 只能对Object或者Array类型的数据进⾏劫持,如果我们想要对普通数据类型的数据进
⾏劫持,可以使⽤ ref API,例如如下代码:
ref
< template >
< h3 > 信息展示组件 </ h3 >
< div style = "margin: 24px 0" >
< span > 姓名: </ span >
< span >{{ data . name }}</ span >
< br />
< span > 年龄: </ span >
< span >{{ data . age }}</ span >
</ div >
< button @click="data.name = ' ⼀碗周 '"> 修改姓名 </ button >
< br />
< button @click="data.age = '20'"> 修改年龄 </ button >
</ template >
< script setup >
// 使⽤ <script setup> 所有的 API 需要单独引⼊,除 Vue3.2 ⾃动引⼊的⼏个 API 外。
import { reactive } from 'vue'
// 创建响应式对象
const data = reactive ({
name : ' ⼀碗粥 ' ,
age : '18' ,
})
</ script >
Vue 6
特别注意的是,setup的语法中是没有this的,因此取变量值的时候不需要使⽤this调⽤
函数
< template >
< h3 > 信息展示组件 </ h3 >
< div style = "margin: 24px 0" >
< span > 姓名: </ span >
<!-- 在模板中, Vue 会⾃动帮助我们为 ref 进⾏解包,所以不需要使⽤ ref.value 的形
-->
< span >{{ name }}</ span >
< br />
< span > 年龄: </ span >
< span >{{ age }}</ span >
</ div >
< button @click="handleEditName"> 修改姓名 </ button >
< br />
< button @click="handleEditAge"> 修改年龄 </ button >
</ template >
< script setup >
// 导⼊ ref
import { ref } from 'vue'
// 创建响应式对象
const name = ref ( ' ⼀碗粥 ' )
const age = ref ( 18 )
const handleEditName = () => {
// 通过 ref 创造的响应式对象,我们需要通过 ref.value 的⽅式访问
name . value = ' ⼀碗周 '
}
const handleEditAge = () => {
age . value = '20'
}
</ script >
Vue 7
< template >
< div >
<!-- `greet` 是上⾯定义过的⽅法名 -->
< button @click="greet">Greet</ button >
</ div >
</ template >
< script >
export default {
// 定义属性
data () {
return {
name : 'Vue.js'
}
},
methods : {
greet ( event ) {
// ⽅法中的 `this` 指向当前活跃的组件实例
alert ( `Hello ${ this. name } !` )
// `event` DOM 原⽣事件
if ( event ) {
alert ( event . target . tagName )
}
}
},
}
</ script >
Options API
Vue 8
在Composition API中定义计算属性是通过 computed ⽅法实现,返回⼀个 ref 对象。

计算属性的⽤法:

计算属性

< template >
< div >
<!-- `greet` 是上⾯定义过的⽅法名 -->
< button @click="greet">Greet</ button >
</ div >
</ template >
< script setup >
// 导⼊ ref
import { ref } from 'vue'
const name = ref ( 'Vue.js' )
function greet ( event ) {
alert ( `Hello ${ name . value } !` )
// `event` DOM 原⽣事件
if ( event ) {
alert ( event . target . tagName )
}
}
</ script >
Composition API
Vue
computed: {
badgeNum () {
// 筛选 todosArray status 1 的元素的个数
return this. todosArray . filter ( item => item . status === 1 ) . length
},
noDeleteArray () {
// 筛选出 todsArray status 不等于 0 的元素
return this. todosArray . filter ( item => item . status !== 0 )
}
},
Options API
Vue 9

侦听

⽣命周期
import { ref , computed } from 'vue'
const name = ref ( ' ⼀碗周 ' )
const age = ref ( '18' )
// 定义计算属性
const user = computed (() => {
return ` 姓名: ${ name . value } \n 年龄: ${ age . value } `
})
Composition API
Vue
watch: {
n (){
console . log ( 'n 变了 ' )
}
},

Options API

Vue
< script setup >
import { ref , watch } from 'vue'
const n = ref ( '' )
// 可以直接侦听⼀个 ref
watch ( n , ( newValue , oldValue )=>{
console . log ( ' 新值: ' + newValue , ' 原值: ' + oldValue )
})
</ script >

Composition API

Vue 10
import { onMounted , onUpdated , onUnmounted } from 'vue'
onMounted (() => {
console . log ( 'onMounted' )
})
onUpdated (() => {
console . log ( 'onUpdated' )
})
onUnmounted (() => {
console . log ( 'onUnmounted' )
})
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值