vue3:reactive,ref,toRefs,computed的使用

1.reactive和ref的区别:
ref能指定基础类型和复杂类型,reacive不能指定基础类型

2.toRefs的作用:使从reactive定义的解构数据变成响应式的

3.computed:计算属性  里面的依赖项变化的时候才会更改,缓存优化

代码示例:这里顺便用了Element-plus 里的form 双向绑定

<template>
  <div>
    <el-form label-width="80px" :model="person">
      <el-form-item label="名称">
        <el-input v-model="person.name"></el-input>
      </el-form-item>
      <el-form-item label="年龄">
        <el-input v-model="person.age"></el-input>
      </el-form-item>
      <div>计算属性:{{ personComputed }}</div>
    </el-form>

    <el-button :onclick="changeName" type="primary">改变姓名</el-button>
    <el-button :onclick="changeAge" type="primary">增加一岁</el-button>
    <el-button :onclick="changeAll" type="primary">改变所有</el-button>
    <el-button :onclick="changeComputed" type="primary">改变计算属性</el-button>
  </div>
</template>
<script setup lang="ts">
import { computed, reactive, toRefs } from 'vue'
let person = reactive({ name: 'lisi', age: 23 })
let { name, age } = toRefs(person)
//改变name.value进行双向数据绑定
const changeName = () => {
  name.value = '李四'
}
const changeAge = () => {
  age.value += 1
}
const changeAll = () => {
  //reactive 写法
  Object.assign(person, { name: (name.value += '~'), age: age.value + 1 })
  //ref写法
  // person.value = { ...person.value+=1, name: name.value += '~' }
}
const personComputed = computed({
  get() {
    return `姓名为:${person.name},年龄是:${person.age}`
  },
  set(v) {
    //set里的v是字符串
    const { name, age } = JSON.parse(v)
    Object.assign(person, { name, age })
  }
})
const changeComputed = () => {
  //改变computed计算属性需要使用get set
  personComputed.value = JSON.stringify({ name: '源', age: 24 })
}
</script>

<style scoped></style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值