我将 Vue 与 Vuex 一起使用。在一种情况下,我使用 Ajax 来获取表示值。在路上的某个地方,可能computed
它不再是被动的。
在我的组件中:
props: [ 'x', 'y' ],
template: `
<div class="presentation">
{{ presentation }}
</div>
`,
computed: {
presentation() {
return this.$store.getters.presentation({ x: this.x, y: this.y });
}
}
Vuex商店:
const store = new Vuex.Store({
state: {
table: {
data: []
}
},
...
Vuex 动作:
我用ajax调用一个url并返回一个promise。我也犯了一个突变。
actions: {
save: (context) => {
let uri = 'some/uri';
let params = {};
let value = 'A value';
return axios
.post(uri, params)
.then((response) => {
context.commit('setPresentation', value);
})
.catch((error) => {
console.log('error');
})
.finally(() => {});
},
},
Vuex 突变:
mutations: {
setPresentation: (state, value) => {
let pos = state.table.pos;
state.table.data[pos.y][pos.x].presentation = value;
},
}
Vuex 吸气剂:
getters: {
presentation: (state) => (pos) => {
return state.table.data[pos.y][pos.x].presentation;
}
},
我已经确定了以下几点:
- 我将
table.data
状态设置为默认值以使其具有反应性 - 使用 getter 获取数据
- 使用 ajax 调用的动作
- 在操作中调用带有提交的突变
笔记:
- ajax 调用需要在一个动作中而不是在创建中,因为我
presentation
要从多个组件中使用。 - 我更喜欢不需要外部 Vue 插件的解决方案。
问题)
- 我错过了什么?
- 我怎样才能以最好的方式解决它?