首页 > 其他分享 >组合式api-通过reactive和ref提供响应式数据

组合式api-通过reactive和ref提供响应式数据

时间:2023-08-12 15:24:29浏览次数:50  
标签:const 函数 999 reactive state api ref

在setup中如果是直接定义遍历数据并不是响应式数据,和vue2中的data选项提供的数据不一样,vue2的data中返回的数据全部都是响应式数据。

<script setup>
  // 这样提供的数据并不是响应式数据,和vue2中的data选项提供的数据并不是一样。
  let state = 888
  const getState = () => {
    return state
  }
  const setState = () => {
    state = 999
  }
</script>

<template>
  <div>
    hello vue3
    <p>state: {{ state }}</p>
    <p>state: {{ getState() }}</p>
    <!--修改不会生效,因为并不是响应式数据-->
    <button @click="setState()">修改state的值为999</button>
  </div>
</template>

使用reactive创建响应式数对象

reactive函数支持传递“对象类型”的参数,并返回一个响应式数据对象。

缺点

只能传递“对象类型”的参数(也就是你不能直接给一个数字、字符串这种简单类型的)

可以用过ref()函数来代替reactive()来解决这个缺点,下面会写。

使用步骤:

  • 导入reactive函数
  • 使用reactive函数并传递一个对象类型的参数

使用实例

<script setup>
  // 1. 导入reactive函数
  import {reactive} from "vue";
  // 2. 使用reactive函数并传递一个对象类型作为参数
  const myData = reactive({
    state: 888
  })
  const getState = () => {
    // 使用的时候是通过对象来操作
    return myData.state
  }
  const setState = () => {
    // 设置的时候也是一样,通过对象操作
    myData.state = 999
  }
</script>

<template>
  <div>
    hello vue3
    <p>state: {{ getState() }}</p>
    <button @click="setState()">修改state的值为999</button>
  </div>
</template>

使用ref创建响应式数据对象

上面的reactive函数创建的响应式对象有个缺点就是只能接收对象类型的参数。

而ref()函数正好可以解决这个问题,但是使用上有一些差别和注意事项!

<!-- 使用ref()函数创建响应式数据对象 -->
<script setup>
// 1. 同样地,也是要先导入ref函数
import {ref} from "vue";
// 2. 使用ref函数并传递你想要的数据进行包装。
const state = ref(666)
const getState = () => {
  // 在script中,使用ref()函数包装过的数据,必须要用.value来调用、和设置值
  return state.value
}
const setState = () => {
  // 在script中,使用ref()函数包装过的数据,必须要用.value来调用、和设置值
  state.value = 999
}
</script>

<template>
  <div>
    hello vue3
    <!-- **但是在模板中,就不需要使用.value,因为会自动帮你做了** -->
    <p>state: {{ state }}</p>
    <button @click="setState()">修改state的值为999</button>
  </div>
</template>

标签:const,函数,999,reactive,state,api,ref
From: https://www.cnblogs.com/juelian/p/17624846.html

相关文章

  • vue3组合式api生命周期
    生命周期钩子函数Vue3:https://cn.vuejs.org/api/composition-api-lifecycle.htmlVue2:https://v2.cn.vuejs.org/v2/api/#选项-生命周期钩子Vue2(选项式)Vue3(选项式)Vue3(组合式Api)beforeCreate()beforeCreate()created()created()setup()beforeMount()bef......
  • 组合式api-侦听器watch的语法
    和vue2对比,也是语法上稍有不同。监听单个数据对象<scriptsetup>import{ref,watch}from"vue";constcount=ref(100)//语法:watch(响应式数据对象,(newVal,oldVal)=>{业务处理...}//只监听单个数据//watch(count,(newValue,oldValue)=>{//console.l......
  • 组合式api-计算属性computed的使用
    计算属性在vue3中和vue2的思想概念都是一样,唯一区别就是在使用组合式api时候的语法稍有不同。使用步骤:导入computed函数import{computed}from'vue'使用computed函数<scriptsetup>import{computed,ref}from"vue";constarr=ref([1,2,3,4,5,6,7,8,9,......
  • 组合式api-ref引用子组件、dom元素, defineExpose的使用
    和vue2一样,我们有时候希望父组件能够调用子组件中的方法、属性。那么就要用到ref。然后你会发现,根本调用不了子组件中的方法"sonSayHi",如下图:原因:使用......
  • 组合式api-子父组件之间通信props和emit
    整体来说和vue2也是比较相似的。使用props传递数据到子组件父组件给定数据。子组件中使用defineProps来接收父组件传递的数据。子组件emit触发事件通知父组件思想和vue2完全一致.....父组件:<scriptsetup>importSonAfrom"@/compon/SonA.vue";import{ref}from......
  • 组合式api-跨层级组件通信provide和inject
    vue2的provide和inject:https://v2.cn.vuejs.org/v2/api/#provide-inject主要作用:跨层级传递数据(响应和非相应数据都可以)、方法(函数),顶层可以跨N层传递数据和方法给子孙组件调用。使用provide和inject可以在不太复杂的场景下,不使用状态管理(vuex、pinia)来解决组件通信问题。使用p......
  • 细谈商品详情API接口设计
    当我们构建电商网站或应用时,常常需要获取淘宝商品的详细信息。为了实现这个功能,我们可以利用淘宝提供的开放平台API接口来获取商品数据。在这篇文章中,我们将学习如何设计一个商品详情API接口,并提供相应的代码示例。首先,我们需要注册淘宝开放平台账号,并创建一个新的应用来获取API访......
  • 细谈商品详情API接口设计
    当我们构建电商网站或应用时,常常需要获取淘宝商品的详细信息。为了实现这个功能,我们可以利用淘宝提供的开放平台API接口来获取商品数据。在这篇文章中,我们将学习如何设计一个商品详情API接口,并提供相应的代码示例。首先,我们需要注册淘宝开放平台账号,并创建一个新的应用来获取API......
  • k8s finalizers和owner references
    finalizers终结器,存放键的列表,列表内的键为空时资源才可被删除。删除指定了Finalizer的对象时,填充.metadata.deletionTimestamp来标记要删除的对象,返回已接受202状态码使其进入只读状态。#创建包含finalizers的configmapcat<<EOF|kubectlcreate-f-apiVersion:v1kind:......
  • 1、编译 glibc 过程中报错 ../configure --prefix=/opt/glibc-2.27       2、首
    64位安装包,查看系统位数,安装对应的mysqlLinux系统安装MySQL时,将MySQL-5.6.17-1.el6.x86_64.rpm-bundle.tar包打开,有7个rpm文件,如下:MySQL-client-5.6.17-1.el6.x86_64.rpmMySQL-devel-5.6.17-1.el6.x86_64.rpmMySQL-embedded-5.6.17-1.el6.x86_64.rpmMySQL-server-5.6.17-1.el6.......