[vue.js音乐App开发记录]Vuex的应用及应用时的项目文件结构设计以完整demo实例解释
来源:互联网 发布:java基本语法 编辑:程序博客网 时间:2024/05/29 14:45
基本概念:
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
目录结构:
Vuex 并不限制你的代码结构。但是,它规定了一些需要遵守的规则:
应用层级的状态应该集中到单个 store 对象中。
提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。
异步逻辑都应该封装到 action 里面。
只要你遵守以上规则,如何组织代码随你便。如果你的 store 文件太大,只需将 action、mutation 和 getter 分割到单独的文件。
使用举例:需求:点击歌手(singer.vue中)加载歌手详情信息(singer-detail.vue)
技术分析:需要将歌手信息传递到歌手详情页
实现方法:可通过参数传入,props接收;也通过Vuex传递数据(本demo选择)
本人Vuex相关的目录结构:
目录结构解释:
index.js(入口文件)
action.js(异步操作/提交mutation)
state.js(状态管理对象)
getters.js(对state.js进行映射)
mutations.js(mutation)
mutation-types.js(mutation常量)(使用常量替代 Mutation 事件类型,简化写法,参考官网)
源码及关键代码解释:
actions.js(由于本demo中并未使用异步操作,因此不含无需使用actions)
mutation-types.js
/** * Created by xiaoqiang on 21/12/2017. */export const SET_SINGER = 'SET_SINGER'
mutations.js
/** * Created by xiaoqiang on 21/12/2017. */import * as types from './mutation-types'const mutations = { [types.SET_SINGER](state, singer) { state.singer = singer }}export default mutations
state.js
/** * Created by xiaoqiang on 21/12/2017. */const state = { singer: {}}export default state
/** * Created by xiaoqiang on 21/12/2017. */export const singer = state => state.singer
index.js
/** * Created by xiaoqiang on 21/12/2017. */import Vue from 'vue'import Vuex from 'vuex'import * as actions from './actions'import * as getters from './getters'import state from './state'import mutations from './mutations'// 用于检测组件状态(打印日志信息)import createLogger from 'vuex/dist/logger'Vue.use(Vuex)// 控制严格模式和plugins只在开发模式下生效const debug = process.env.NODE_ENV !== 'production'// 初始化Storeexport default new Vuex.Store({ actions, getters, state, mutations, strict: debug, plugins: debug ? [createLogger()] : []})
singer.vue相关代码详解:
singer-detail.vue中相关代码详解:
Vuex原理:
之所以将原理图放在这里,是因为结合代码,现在再看原理图就比较容易理解了:
运行结果:
点击singer.vue中的歌手,跳转至singer-detail.vue后的运行结果:
第一次点击prev state中的singer会是一个空对象
返回后再次点击,createLogger插件会输出前一次数据以及当前一次数据值,记录数据变化。
- [vue.js音乐App开发记录]Vuex的应用及应用时的项目文件结构设计以完整demo实例解释
- 一个完整的vue应用 ( vuex+vue-router ) 起手
- jQuery应用时的记录
- 基于vue.js开发的demo—天气APP
- 基于vue+vue-router+vuex+axios+webpack开发的个人Demo《Qu约》
- 基于vue+vue-router+vuex+axios+webpack开发的个人Demo《Qu约》
- vue.js开发外卖App项目的内容总结(四)
- vue开发app项目实例
- Vue.js+Vuex:一个简单的记事本
- 编译应用时的Android.mk文件
- MySQL 开发应用时的超时问题
- weblogic开发应用时的常见问题总结
- [vue.js音乐App开发记录]vue2.0通过二级路由实现页面切换
- 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
- 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
- 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
- 用 vue.js 开发微信 app(ios 版) 界面的 demo
- 用 vue.js 开发微信 app(ios 版) 界面的 demo
- vue 插槽slot
- APP研发博文,做个记录好找
- viewpager java.lang.IllegalArgumentException:The observer is null
- 阻抗匹配
- 使用node搭建一个简单服务
- [vue.js音乐App开发记录]Vuex的应用及应用时的项目文件结构设计以完整demo实例解释
- JavaScript<四>
- linux ssh无密钥登陆
- TabLayout +ViewPager+Fragment + RecycleView + webView加载本地html
- 最大连续子序列和
- CXF简介
- hrbust I Want Candy 2353
- 对话框
- 111