- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在创建一个基本的 SPA,但碰巧我用 Vuex 管理的状态和那里的突变都很好,但是在我想使用 mapState 和 mapMutations 的每个组件中,我必须在本地导入它们。
<script>
import {mapState,mapMutations } from 'vuex';
export default{
computed : mapState(['isLoggedIn']),
methods: {
...mapMutations(['logout'])
}
}
</script>
这是正确的做法吗?或者如何在全局声明它们并避免在每个组件中导入,以便如下所示?
<script>
export default{
computed : mapState(['isLoggedIn']),
methods: {
...mapMutations(['logout'])
}
}
</script>
最佳答案
mapMutations
等 Vuex 助手返回一个填充有函数的对象,该函数假定 this.$store
是一个 Vuex 存储。
如果您需要在 vanilla JS 中使用商店并且您不想在任何地方公开商店模块,您可以定义一个服务模块。
import { mapActions } from 'vuex';
import $store from '@/store';
/**
* Simple mapping of the Vuex store UI module.
* @module services/ui
* @property {Function} pushMessage
*/
export default Object.assign({
$store,
}, mapActions('ui', ['pushMessage']));
现在,使用它就像导入服务模块一样简单。
import ui from './services/ui';
// triggers the `pushAction` on the ui namespaced store module
ui.pushMessage({ content: 'whatever' });
要在 Vue 组件上使用默认计算和方法,您可以创建一个简单的 mixin 以导入特定组件。
import { mapState, mapMutations } from 'vuex';
export default {
computed : mapState(['isLoggedIn']),
methods: mapMutations(['logout'])
}
然后,在组件中使用 mixin。
<script>
import mixin from './mixin';
export default {
mixins: [mixin],
data() {/* ... */},
// etc.
}
</script>
如果你真的希望每个组件都有这个默认的 mixin 而不必显式定义它,请使用全局 mixin。
import Vue from 'vue';
import { mapState, mapMutations } from 'vuex';
export const mixin = {
computed : mapState(['isLoggedIn']),
methods: mapMutations(['logout'])
};
Vue.mixin(mixin);
就个人而言,作为标准,我从不映射状态或突变。
我只映射 getter 和 Action ,因此我的组件不需要知道状态结构以及 Action 是否异步。我将 getter 和操作视为 Vuex 商店(或任何类似商店,如 Redux)的公共(public) API。
我也只映射相关数据。组件的职责是与应用程序的用户交互,显示和处理事件,仅此而已。如果您的所有组件都需要 user
对象,也许它们做的太多了,该逻辑可能应该移到其他地方,比如在一个 Action 中。
在 Vue communication 上查看更多信息
关于javascript - 在 SPA VueJS 中全局声明 mapState 和 mapMutations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49741130/
我是 Vues.js 的初学者,我在问一些关于 mapMutation 方法的问题。 我想用这种方法传递参数,但我不知道如何。 我想通过使用 mapMutations 来转换我的两种方法: incre
如何将命名空间与下面的 mapMutations 一起使用? methods: { addTodo() { this.$store.commit('todos/addTodo
我想按如下方式设置 Vuex 突变: export default { props: { store: String }, methods: {
我正在创建一个基本的 SPA,但碰巧我用 Vuex 管理的状态和那里的突变都很好,但是在我想使用 mapState 和 mapMutations 的每个组件中,我必须在本地导入它们。 imp
我使用名为 main 的 Vuex 模块获得以下计算属性: computed: { foo: { get(){ return this.$store.state.main.fo
我已经使用 vue/vuex 几个月了,我看到了 mapState、mapGetters、mapActions、mapMutations但除了 mapState 之外不知道他们做了什么。 这就是我使用
我是一名优秀的程序员,十分优秀!