只有在Vue中请求时才在ref中加载值

2vuwiymt  于 2023-11-21  发布在  Vue.js
关注(0)|答案(1)|浏览(155)

在我的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,它被填充在myRefcomputed内部,但可能不是理想的:

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)?

wsewodh2

wsewodh21#

虽然你可以自己构建类似的东西,但你可以考虑为computedAsync函数检查VueUse。具体来说,你可能需要这里描述的lazy选项。
该库是高质量的,我们正在我们的项目中广泛使用它。许多功能超出了这个特定的需求。

相关问题