P粉935883292 2023-08-03 15:58:35 0 2 191
给定以下在Vue.js 3中的组合式 'useNumbers.js',我希望组件中的 'numbers' 具有响应性。但是,在一个组件中添加新的值到 'numbers' 中并不会在第二个组件中反映出来。
useNumbers.js:
import { ref } from 'vue'; export default function() { const numbers = ref([1, 2, 3, 4, 5]); const addNumber = num => { numbers.value.push(num); } const filterNumber = minNum => { return numbers.value.filter(curNum => curNum >= minNum); } return { numbers, addNumber, filterNumber } }
Component A:
Child component
{{ numbers }}
Component B:
GreatGrandChild component
{{ numbers }}
每当我在组件A中点击按钮(将45添加到数组中),这个变化不会在组件B中反映出来。我知道,像解构赋值这样的操作会导致丢失响应性。
const { numbers, addNumber } = useNumbers()
破坏了响应性。我尝试使用toRef和toRefs进行了一些尝试,但目前还没有找到解决方案。
P粉136356287 2023-08-04 12:13:23 2楼
您的问题的主要原因是每次调用useNumbers函数时,都会创建一个新的numbers对象实例。因此,每个组件都有自己的numbers副本,这些副本在组件之间不共享。
使用store
赞 +0 添加回复
P粉786800174 已被采纳 2023-08-04 11:18:17 1楼
为了在多个useNumbers实例之间保持相同的状态,您可以将状态提升到函数外部,这样它只会被创建一次。
Vue Playground example
赞 +0 添加回复