一、VUE3——setup、ref、reactive理解


一、Vue3 改变

1、性能提升

(1)打包大小减少41%
(2)初次渲染快55%,更新渲染快133%
(3)内存减少54%

2、源码的升级

(1)使用Proxy代替defineProperty实现响应式
(2)重写虚拟DOM的实现和Tree-Shaking

3、拥抱TypeScript

Vue3可以更好地支持TypeScript

二、setup 使用

<template>
  <h1>信息</h1>
  <h2>姓名:{{name}}</h2>
  <h2>年龄:{{age}}</h2>
  <button @click="sayHello">speak</button>
</template>

<script>
export default{
  name:'App',
  // 测试setup,不考虑响应式
  setup(){
    // 数据
    let name='张三'
    let age=18

    // 方法
    function sayHello(){
      alert(`${name},${age}`)
    }

    // 返回一个对象
    return{
      name,
      age,
      sayHello
    }
  }
}
</script>

1、注意点一

尽量不要与vue2.x配置混用,vue2.x配置(data、methods、computed)中可以访问到setup中的属性、方法。但在setup中不能访问到vue2.x配置(data、methods、computed)。如果有重名,setup优先。

2、注意点二

setup不能是一个async函数,因为返回值不再是return对象,而是promise。

三、ref 函数

<template>
  <h1>个人信息</h1>
  <h2>姓名:{{name}}</h2>
  <h2>年龄:{{age}}</h2>
  <h3>工作种类:{{job.type}}</h3>
  <h3>工资:{{job.salary}}</h3>
  <button @click="changeInfo">修改个人信息</button>
</template>

<script>
import{ref}from 'vue'
export default{
  name:'App',
  setup(){
    // 数据
    let name=ref('张三')
    let age=ref(18)
    let job=ref({
      type:'工程师',
      salary:'30k'
    })

    // 方法
    function changeInfo(){
      name.value='李四'
      age.value=48,
      job.value.salary='10k',
      job.value.type='测试'
    }

    // 返回一个对象
    return{
      name,
      age,
      job,
      changeInfo
    }
  }
}
</script>

1、作用

定义一个响应式的数据

2、语法

const xxx=ref(initValue)
创建一个包含响应式数据的引用对象(ref对象)
JS中操作数据:xxx.value
模板中操作数据:不需要.value,直接:{{xxx}}

3、接收的数据

接收的数据可以是基本类型也可以是对象类型。
基本类型的数据:响应式依然是靠object.defineProperty()的get与set完成的。
对象类型的数据:内部使用了vue3中的一个新函数——reactive函数。

四、reactive 函数

<template>
  <h1>个人信息</h1>
  <h2>姓名:{{name}}</h2>
  <h2>年龄:{{age}}</h2>
  <h3>工作种类:{{job.type}}</h3>
  <h3>工资:{{job.salary}}</h3>
  <h3>爱好:{{hobby}}</h3>
  <button @click="changeInfo">修改个人信息</button>
</template>

<script>
import{ref,reactive}from 'vue'
export default{
  name:'App',
  setup(){
    // 数据
    let name=ref('张三')
    let age=ref(18)
    let job=reactive({
      type:'工程师',
      salary:'30k'
    })
    let hobby=reactive(['看书','音乐','游戏'])

    // 方法
    function changeInfo(){
      name.value='李四'
      age.value=48,
      job.value.salary='10k',
      job.value.type='测试',
      hobby[0]='学习'
    }

    // 返回一个对象
    return{
      name,
      age,
      job,
      hobby,
      changeInfo
    }
  }
}
</script>

1、作用

定义一个对象类型的响应式数据(基本数据类型不用,要用ref函数)

2、语法

const 代理对象=reactive(源对象),接收一个对象(或数组),返回一个代理对象(proxy对象)

3、实现原理

reactive定义的响应式数据是深层次的,内部基于ES6的Proxy实现,通过代理对象操作源对象内部数据进行操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue3中,setup函数可以使用reactive函数来创建响应式对象。引用中的示例代码展示了如何在setup函数中使用reactive来创建一个响应式的对象。在这个例子中,通过调用reactive函数,可以将一个普通的JavaScript对象转化为响应式对象。这个响应式对象可以在模板字符串中直接使用,并且当对象的属性发生变化时,模板会自动更新。在示例中,使用了一个job对象,它包含了type和salary两个属性。通过在setup函数中返回这个job对象,可以在组件的模板中直接使用它,并且当执行fun1函数时,修改job对象的type属性,模板会自动更新显示修改后的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue3快速上手.md](https://download.csdn.net/download/TOP1999LHF/74382575)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Vue3知识点总结(一)——setup() ref() reactive()函数](https://blog.csdn.net/qq_56989560/article/details/125004154)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鞋不压震

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值