使用 Vuex 和 Composition API,有没有办法访问响应式属性?
Using Vuex and the Composition API, is there a way to access reactive properties?
如果我这样设计我的组件:
<template>
<div>
<button @click="increment">Count is: {{ store.getters.count }}</button>
</div>
</template>
<script>
import { reactive } from "@vue/composition-api";
import store from "../store";
export default {
name: "Count",
setup() {
const state = reactive({
store
});
const increment = () => {
store.dispatch.increment();
};
return {
...state,
increment
};
}
};
</script>
我的商店是这样定义的:
import Vue from "vue";
import Vuex from "vuex";
import { createDirectStore } from "direct-vuex";
Vue.use(Vuex);
const {
store,
rootActionContext,
moduleActionContext,
rootGetterContext,
moduleGetterContext
} = createDirectStore({
state: {
count: 0
},
getters: {
count: state => state.count
},
mutations: {
increment(state) {
state.count++;
}
},
actions: {
increment(context) {
context.commit("increment");
}
}
});
// Export the direct-store instead of the classic Vuex store.
export default store;
// The following exports will be used to enable types in the
// implementation of actions and getters.
export {
rootActionContext,
moduleActionContext,
rootGetterContext,
moduleGetterContext
};
// The following lines enable types in the injected store '$store'.
export type AppStore = typeof store;
declare module "vuex" {
interface Store<S> {
direct: AppStore;
}
}
有什么方法可以比模板中的 {{ store.getters.count }}
更好地访问计数?理想情况下,我想像 {{ count }}
一样访问它,但似乎只有 store
是反应式的。换句话说,如果我发送增量操作,``{{ count }}` 不会更新,即使我尝试以各种方式定义计数。这是我尝试过的一件事:
setup() {
const state = reactive({
store,
count: store.getters.count
});
const increment = () => {
store.dispatch.increment();
};
return {
...state,
count: state.count,
increment
};
}
为什么 {{ count }}
在这种情况下没有反应?
count: store.getters.count
表示您将 store.getters.count
的当前值存储为状态 count
.
的默认值
这意味着它不会反应。请注意,商店中的 count
是一个函数。
您可以尝试将您的状态 count
改为计算 属性,这样它就能正确更新。
我还没有试过作文API,但我希望能帮到你。
如果我这样设计我的组件:
<template>
<div>
<button @click="increment">Count is: {{ store.getters.count }}</button>
</div>
</template>
<script>
import { reactive } from "@vue/composition-api";
import store from "../store";
export default {
name: "Count",
setup() {
const state = reactive({
store
});
const increment = () => {
store.dispatch.increment();
};
return {
...state,
increment
};
}
};
</script>
我的商店是这样定义的:
import Vue from "vue";
import Vuex from "vuex";
import { createDirectStore } from "direct-vuex";
Vue.use(Vuex);
const {
store,
rootActionContext,
moduleActionContext,
rootGetterContext,
moduleGetterContext
} = createDirectStore({
state: {
count: 0
},
getters: {
count: state => state.count
},
mutations: {
increment(state) {
state.count++;
}
},
actions: {
increment(context) {
context.commit("increment");
}
}
});
// Export the direct-store instead of the classic Vuex store.
export default store;
// The following exports will be used to enable types in the
// implementation of actions and getters.
export {
rootActionContext,
moduleActionContext,
rootGetterContext,
moduleGetterContext
};
// The following lines enable types in the injected store '$store'.
export type AppStore = typeof store;
declare module "vuex" {
interface Store<S> {
direct: AppStore;
}
}
有什么方法可以比模板中的 {{ store.getters.count }}
更好地访问计数?理想情况下,我想像 {{ count }}
一样访问它,但似乎只有 store
是反应式的。换句话说,如果我发送增量操作,``{{ count }}` 不会更新,即使我尝试以各种方式定义计数。这是我尝试过的一件事:
setup() {
const state = reactive({
store,
count: store.getters.count
});
const increment = () => {
store.dispatch.increment();
};
return {
...state,
count: state.count,
increment
};
}
为什么 {{ count }}
在这种情况下没有反应?
count: store.getters.count
表示您将 store.getters.count
的当前值存储为状态 count
.
这意味着它不会反应。请注意,商店中的 count
是一个函数。
您可以尝试将您的状态 count
改为计算 属性,这样它就能正确更新。
我还没有试过作文API,但我希望能帮到你。