在第三场比赛中,裁判VS反应性? [英] ref vs reactive in Vue 3?
本文介绍了在第三场比赛中,裁判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'
、true
、23
等) - 这是一个需要稍后重新分配的对象(如数组-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屋!
查看全文