好吧,我认为只是总结您的问题可以称为您无法访问两个不同组件之间的相同状态。
我通常做的是从方法内部的一个组件进行 API 调用beforeMount
,这将保证一旦创建了我的组件,数据就可以使用。
此外,在调用 api 之后,我会更新我的状态,以便之后我可以从任何地方调用它。
您必须注意的一件事是首先加载哪个组件?
如果 A 是 B 的父级,那么您应该在 A 中加载数据。但是,如果 A 和 B 是兄弟姐妹,那么您应该在它们两个内部加载数据,因为您可以先访问组件 A 或 B,然后您不知道何时数据将可用。在这种情况下,我会在两个组件中加载数据。此外,将缓存添加到您的服务器,这样您就不需要再次加载相同的数据。
例如:
状态
{
data: {}
}
组分 A
export default {
name: 'Batch',
beforeMount() {
this.getDataFromAPI();
},
methods: {
// getDataFromAPI will store its return inside data with a mutation
...mapActions(['getDataFromAPI']),
randomMethod() {
// Now I can Use my state
const data = this.$store.state.data;
}
}
};
B组份
export default {
name: 'Batch',
methods: {
randomMethodB() {
// If component A was loaded first than component B and A is B's parent, then the state will be accessible in the same manner and it should be populated
const data = this.$store.state.data;
}
}
};
行动
const getDataFromAPI = ({ commit }) => new Promise((resolve, reject) => {
// Call server
const data = await callServer();
commit('updateMyStateWithData');
resolve(data);
});
export default {
getDataFromAPI
}
突变
const mutations = {
updateMyStateWithData(state, newData) {
state.data = newData;
}
}
export default mutations;
我要做的另一件事是定义 getter,这种方式是一次加载数据的好方法,然后在 getter 内部更新数据以仅返回 UI 需要的内容。
我希望它有所帮助!