ref() 和 watch() 组合是不是等同于 Vue 3 中的 computed()?

Posted

技术标签:

【中文标题】ref() 和 watch() 组合是不是等同于 Vue 3 中的 computed()?【英文标题】:Is ref() & watch() combination equivalent to computed() in Vue 3?ref() 和 watch() 组合是否等同于 Vue 3 中的 computed()? 【发布时间】:2021-10-09 01:06:57 【问题描述】:

我有一个反应对象

team

它有一个属性

players

我还想让players 具有响应性(通过从自定义挂钩导出它来简化使用)。

这两段代码是等价的吗?

(我想他们不是,但我想知道使用其中一种方式的陷阱)

const players = computed(() => team.value.players);
const players = ref(team.value.players);

watch(team, () => players.value = team.value.players);

我应该使用哪一个?有很大的不同(优化?) v-model 的用法如何?

【问题讨论】:

【参考方案1】:

建议将计算属性与 getter/setter 一起使用,以便能够将其绑定到 v-model

const players = computed(
 get() => team.value.players,
 set(newVal)
 
 
);

【讨论】:

但是如果我使用计算属性并使用 set(newVal) ... 更改球员,这是否适用于球队对象的球员属性? 不,我认为这会造成无限循环

以上是关于ref() 和 watch() 组合是不是等同于 Vue 3 中的 computed()?的主要内容,如果未能解决你的问题,请参考以下文章

vue watch原理

初识vue3-setup语法糖,ref和reactive语法,computde计算属性,watch开启监听

vue3中的computed和watch

vue3.0组件监听异步数据,watch与reactive 的应用, watch与computed, 还有ref的使用

vue3.0组件监听异步数据,watch与reactive 的应用, watch与computed, 还有ref的使用

vue3.0组件监听异步数据,watch与reactive 的应用, watch与computed, 还有ref的使用