在第三场比赛中,裁判VS反应性? [英] ref vs reactive in Vue 3?

查看:8
本文介绍了在第三场比赛中,裁判VS反应性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

查看一些人针对Vue 3的预览教程的一些示例。[当前测试版]

我找到了两个例子:

被动

<template>
  <button @click="increment">
    Count is: {{ state.count }}, double is: {{ state.double }}
  </button>
</template>

<script>
import { reactive, computed } from 'vue'

export default {
  setup() {
    const state = reactive({
      count: 0,
      double: computed(() => state.count * 2)
    })

    function increment() {
      state.count++
    }

    return {
      state,
      increment
    }
  }
}
</script>

参考

<template>
  <div>
    <h2 ref="titleRef">{{ formattedMoney }}</h2>
    <input v-model="delta" type="number">
    <button @click="add">Add</button>
  </div>
</template>

<script>
import { ref, computed, onMounted } from "vue";

export default {
  setup(props) {
    // State
    const money = ref(1);
    const delta = ref(1);

    // Refs
    const titleRef = ref(null);

    // Computed props
    const formattedMoney = computed(() => money.value.toFixed(2));

    // Hooks
    onMounted(() => {
      console.log("titleRef", titleRef.value);
    });

    // Methods
    const add = () => (money.value += Number(delta.value));

    return {
      delta,
      money,
      titleRef,
      formattedMoney,
      add
    };
  }
};
</script>

推荐答案

要点

  • reactive()只接受对象,不接受JS原语(字符串,布尔值,数字,BigInt,符号,空,未定义)
  • ref()正在幕后调用reactive()
  • 由于reactive()适用于对象,ref()调用reactive(),因此对象适用于这两个
  • 但是,ref().value属性可供重新分配,reactive()没有该属性,因此无法重新分配

使用

ref()何时..

  • 它是一个原语(例如'string'true23等)
  • 这是一个需要稍后重新分配的对象(如数组-more info here)

reactive()何时..

  • 该对象不需要重新分配,您希望避免ref()
  • 的开销

摘要

ref()似乎是可行的方法,因为它支持所有对象类型,并允许使用.value重新分配。ref()是一个很好的起点,但随着您习惯该API,请了解reactive()的开销较少,您可能会发现它更能满足您的需求。

ref()使用案例

您将始终对基元使用ref(),但ref()适用于需要重新分配的对象,如数组。

setup() {
    const blogPosts = ref([]);
    return { blogPosts };
}
getBlogPosts() {
    this.blogPosts.value = await fetchBlogPosts();
}

使用reactive()执行上述操作需要重新分配属性,而不是整个对象。

setup() {
    const blog = reactive({ posts: [] });
    return { blog };
}
getBlogPosts() {
    this.blog.posts = await fetchBlogPosts();
}

reactive()使用案例

reactive()的一个很好的用例是一组属于一起的基元:

const person = reactive({
  name: 'Albert',
  age: 30,
  isNinja: true,
});

上面的代码比

更符合逻辑
const name = ref('Albert');
const age = ref(30);
const isNinja = ref(true);

有用链接

如果您仍然迷路,这个简单的指南帮助了我:https://www.danvega.dev/blog/2020/02/12/vue3-ref-vs-reactive/

仅使用ref()的参数:https://dev.to/ycmjason/thought-on-vue-3-composition-api-reactive-considered-harmful-j8c

reactive()ref()存在背后的决策以及其他重要信息,Vue组成API RFC:https://vue-composition-api-rfc.netlify.app/#overhead-of-introducing-refs

这篇关于在第三场比赛中,裁判VS反应性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆