Javascript 大型网站中的Vuex商店体系结构
目前正在使用Vue.js构建一个大型网站, 被困在Vuex商店的体系结构中 文件夹结构现在如下所示Javascript 大型网站中的Vuex商店体系结构,javascript,vue.js,vuex,vuex-modules,Javascript,Vue.js,Vuex,Vuex Modules,目前正在使用Vue.js构建一个大型网站, 被困在Vuex商店的体系结构中 文件夹结构现在如下所示 . ├── build ├── src │ └── components │ ├── Header.vue │ └── TimeStamp.vue │ └── Photo.vue │ └── pages │ ├── index.vue │ └── about.vue (includes Header.vue, Thumbnail.
.
├── build
├── src
│ └── components
│ ├── Header.vue
│ └── TimeStamp.vue
│ └── Photo.vue
│ └── pages
│ ├── index.vue
│ └── about.vue (includes Header.vue, Thumbnail.vue)
├── store
│ └── index.js
│ └── modules
│ ├── Header.js
│ └── TimeStamp.js
│ └── Photo.js
基本上我的代码模式是每个组件都有一个对应的模块存储,但似乎所有模块状态都需要作为一个大的单个对象导入,这一点现在让我感到困惑,因为这意味着即使在页面中不需要时间戳组件,时间戳状态仍然存在于范围中,假设我总共有数百个状态,但我只需要Header.js
store,所以其他所有状态实际上都是无用的
因此,我的问题是:
是否可以为每个页面创建动态状态对象。
例如,在“关于”页面中,仅导入Header.js
和Photo.js
,
在索引页面中,只导入Header.js
和TimeStamp.js
,结构如下所示
vuex存储的思想是,它有一个包含所有数据的单一对象。只挑选商店的一部分不符合预期设计。如果您的数据只存在于页面中,那么您可以自行管理数据,而不是使用全局范围 TL;博士 不
实际上,从理论上讲,可以在加载组件时加载数据,在不需要时卸载数据。然后,您可以实现自动化,但这不是通量模式的要点。单状态对象 似乎所有模块状态都需要作为单个大对象导入 嗯,它都是作为单个对象进行管理的。但是你当然知道可以根据需要返回碎片的getter 将存储模块组合在一起非常容易
export const store=new Vuex.store({
模块:{
配置,
使用者
页,
...
},
插件:[addTagToType\u StorePlugin]
})
拥有单个对象的好处是可以添加横切代码,如上面的addTagToType_StorePlugin
(这是为了增强开发人员工具的显示)
动态 是否可以为每个页面创建动态状态对象 当然 没有关于如何构建你的州的规则。flux模式只是为您提供了有关如何更新和访问状态的规则 您应该使用最适合您的应用程序的任何结构 您可以在上面看到,我使用了
页面
状态模块。为了让您了解动态方面,这里是初始结构
const state={
档案:{
验证:[],
指代:[],
诊所:[]
},
}
因此,files
下的每个属性用于不同的页面。如果用户从未访问过“验证”页面,则不会加载状态
如何访问动态? getter可以返回一个带有参数的函数,该参数用于“动态”选择状态片(Ref:)
开发工具和动态 上面提到的插件用于增强ChromeDevTools在修改动态数据时的显示效果。参考号 变异可能是
SET\u文件
,但是哪个页面文件?在payload.tag中传递页面类型,此插件将更改(例如) 到
也许你能帮我。看看这个:
├── store
│ └── pages
│ ├── Index.js
│ └── About.js
│ └── News.js
│
│ └── modules
│ ├── Header.js
│ └── TimeStamp.js
│ └── Photo.js
const getters = {
pageFiles: state => {
return page => {
return state.files[page]
}
},
computed: {
pageFiles() {
return this.$store.getters.pageFiles(this.page)
},
const addTagToType_StorePlugin = store => {
store.subscribe((mutation, state) => {
if (mutation.payload.tag) {
mutation.type = `${mutation.type} / ${mutation.payload.tag}`
}
})
}
SET_FILES
SET_FILES / validations