vue.js - 非命名空间模块上的 mapState
问题描述
我有一个模块
export default {
namespaced: false,
state,
actions,
mutations,
getters
};
在我的组件中,我尝试了这些:
...mapState(["user"]),
...mapState('auth',["user"]),
但它们都不起作用,相反我必须将其用作计算属性:
user() { return this.$store.state.auth.user; },
是否可以使用 ...mapState?
解决方案
地图获取者
使用非命名空间模块最有效的方法是定义一个 getter。优点是您不必在要使用该属性的每个组件中重新定义它。
getters: {
user: state => state.user,
}
...mapGetters([
"user",
]),
这与您“不应该过度使用 getter”的某些信念相反,但这是一个可悲的现实,这是 Vuex 出错的一件事。由于非命名空间模块与根状态共享它们的命名空间,它们的道具也应该立即可用,但它们不是。
地图状态
如果您想改用 mapState,我认为嵌套解构语法对此没有任何好处:
...mapState({
user: ({ auth: { user } }) => user,
}),
这根本不可读。这不会使您的代码更短,因为无论如何您都需要重复道具名称。这是要走的路:
...mapState({
user: state => state.auth.user,
}),
推荐阅读
- dart - 如何在共享首选项中添加小部件
- c - 有人可以解释这个scanf代码的含义吗
- javascript - JS - 将键附加到匹配的数组、对象值
- java - 从 JAVA 运行 TCL 脚本
- javascript - 使用 npm 进行不可复制的安装
- jakarta-ee - 两个相似的网页,使用一个/两个控制器?为什么?
- firebase - Firestore:userId 规则
- c# - 在我通过 IActionResult 从我的 Asp Net Core 项目将 XML 数据返回到 html 后,为什么符号 ω 看起来像 ╧ë?
- excel - ActiveWorkbook.SaveAs
- wordpress - 当我们在 word press 登录时,是否有任何功能或插件可以在 laravel 中登录用户