vue3的ref()和reactive()

举报
搞前端的半夏 发表于 2022/01/25 22:30:07 2022/01/25
【摘要】 Vue3摒弃了上一代版本的函数式API-Options API ,采用了组合式API- Composition API。Composition API允许用户像编写函数一样自由地组合逻辑和代码。组合式API提供了两个重要的函数ref和reactive。ref主要用于布尔值,数值,字符串等,reactive主要用在对象,但是实际使用中并没有这么简单单,我们该选择合适何时使用ref(),何时使用...

Vue3摒弃了上一代版本的函数式API-Options API ,采用了组合式API- Composition API。Composition API允许用户像编写函数一样自由地组合逻辑和代码。组合式API提供了两个重要的函数ref和reactive。ref主要用于布尔值,数值,字符串等,reactive主要用在对象,但是实际使用中并没有这么简单单,我们该选择合适何时使用ref(),何时使用reactive()

何时使用ref()和何时使用reactive()

最基础的,我们最好(必须)使用ref()来创建响应式原始值。

// Boolean ref
const isVisible = ref(true);

// String ref
const name = ref('搞前端的半夏');

reactive(),只用于创建响应式对象类型数据,这和vue2 的data类似,你可以将它看成是vue2中Option API 的data选项的替代品。

const state = reactive({
  isVisible: true,
  name: '搞前端的半夏',
});

但你也可以使用ref()它。在下面的示例中,我们使用ref()来创建一个响应式对象。

const state = ref({
  isVisible: true,
  name: '搞前端的半夏',
});

使用ref()创建对象,在使用过程中主要有两点不同。

  1. ref创建的变量必须使用.value

    reactiv()创建的变量则不需要。

    const state = ref({
      isVisible: true,
      name: '搞前端的半夏',
    });
    
    state.value.isVisible = false;
    
    const state = reactive({
      isVisible: true,
      name: '搞前端的半夏',
    });
    state.isVisible = false
    2.
    
  2. ref创建的对象,可以整体修改,但是reactive并不支持。


state.value = {
  isVisible: false,
  name: '搞前端的半夏',
};


ref()的缺点

在使用.valuerefs 时不断地使用是一件很糟糕的事情。但至少它非常清楚地表明您正在使用响应式数据。

一种可能的解决方法是使用unref().

因为在使用ref创建的变量,必须使用.value才能获取到具体的值。有一种情况:我们定义了一个函数接收了一个参数,并且在函数中使用,但是如果你传递一个ref定义的变量的话,可能就会出错。因为.value才能获取到具体的值。一个比较简单的办法就是使用unref()函数,来将ref创建的变量转成普通变量。

import { unref } from 'vue';

// `number` might or might not be a ref.
function addOne(number) {
  return unref(number) + 1;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。