提问人:stella kim 提问时间:11/17/2023 最后编辑:stella kim 更新时间:11/21/2023 访问量:18
我想从 Vue 3 中的父组件访问子组件中异步存储的数据
I want to access asynchronously stored data in a child component from the parent component in Vue 3
问:
我不擅长英语。请谅解。 从 Vue3 中的子组件异步接收数据并将其存储在存储中 检查父组件中存储的值后 我想将isLoad设置为true,但是即使我使用watch,watchEffect也无法检测到它。 怎么了?
App.vue (英语)
const commonStore = useCommonStore();
const storeRef = storeToRefs(commonStore);
watchEffect(() => {
if (state.value.data1.value !== null && state.value.data2.value !== null) {
isLoad.value = true;
// console.log('true', isLoad.value);
} else {
console.log('false', isLoad.value);
}
});
<template>
<Component1 />
<Component2 />
</template>
商店.vue
export const useCommonStore = () => {
const state = {
data1: ref(null),
data2: ref(null),
isDataLoaded: ref(false),
};
const stateInfo = computed(()=>state)
const getterIsDataLoaded = computed(()=>state.isDataLoaded.value)
const setData1 = (data: any) => {
state.data1.value = data;
};
const setData2 = (data: any) => {
state.data2.value = data;
};
const resolveIsDataLoaded = (data:any) => {
state.isDataLoaded.value = data;
};
return {
state,
stateInfo,
setData1,
setData2,
getterIsDataLoaded,
resolveIsDataLoaded
};
};
答:
0赞
Tal Mogendorff
11/19/2023
#1
我缺乏有关商店类型(Vuex / pinia)的信息,但我仍然可以引导您找到解决方案。
首先,我建议检查加载的分配变量,在 App.vue 中,您正在设置“isLoad.value”,而在 Store 中,您有一个名为“isDataLoaded”的状态属性。
此外,I 将更改为:const storeRef = storeToRefs(commonStore);
const {data1, data2, isDataLoaded} = storeToRefs(commonStore);
然后,您可以在所需的场景中根据需要使用它们。
*请注意,建议仅在 Action 回调中更改 Pinia 中的状态,例如:
setData1(data1) {
this.data1 = data1;
},
并且还可以通过 Getter 函数获取状态:
getData1: (state) => state.data1,
这是更清洁的方式,希望它能帮助:)
评论