在我的Vue项目中,我有一个ref
变量,它包含一些从DB加载的数据。
我的目标是只在用户请求时加载值,然后在加载后总是返回它,以避免不必要的DB访问。方法如下:
// Create the "ref" in a smart way <- TODO
const myRef = ref(
// something like:
// return myRef ?? readMyRefFromDB();
);
...
// User access the value
console.log(myRef.value); // <- first usage: access DB and fill value property
...
// User re-access the value
console.log(myRef.value); // <- next usage: no need to access DB, return value
字符串
目前,我的方法是,每当需要访问myRef.value
时,我首先调用readMyRefFromDB
,如果值已经存在,它什么也不做。然而,这迫使我总是使用至少2行来做这件事,而且当多次使用时,它很容易出错。
我能想到的另一种方法是使用computed
getter,但是我需要从它自己的getter内部访问属性,这应该是不可能的。一个可能的解决方案可能是使用一个虚拟的ref
,它被填充在myRef
的computed
内部,但可能不是理想的:
const dummyRef = ref();
const myRef = computed(() => dummyRef.value ?? readMyRefFromDB());
function readMyRefFromDB() {
dummyRef.value = db.load('myRef')
return dummyRef.value;
}
...
// User only accesses myRef
console.log(myRef.value);
型
有没有更好的方法(Vue-friendly)?
1条答案
按热度按时间wsewodh21#
虽然你可以自己构建类似的东西,但你可以考虑为
computedAsync
函数检查VueUse。具体来说,你可能需要这里描述的lazy
选项。该库是高质量的,我们正在我们的项目中广泛使用它。许多功能超出了这个特定的需求。