Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。
【即数据管理】
它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。
【vuex中存储着所有组件的共享数据】
状态管理模式
状态自管理应用包含以下几个部分:
new Vue({ // state data () { return { count: 0 } }, // view template: `
Vuex 是专门为 Vue.js 设计的状态管理库,以利用 Vue.js 的细粒度数据响应机制来进行高效的状态更新。
每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同:
Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
安装 Vuex 之后,让我们来创建一个 store。创建过程直截了当——仅需要提供一个初始 state 对象和一些 mutation:
// 如果在模块化构建系统中,请确保在开头调用了 Vue.use(Vuex) const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } } })
现在,你可以通过 store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更:store.commit ("increment ")
store.commit('increment') console.log(store.state.count) // -> 1
再次强调,我们通过提交 mutation 的方式,而非直接改变 store.state.count,是因为我们想要更明确地追踪到状态的变化。这个简单的约定能够让你的意图更加明显,这样你在阅读代码的时候能更容易地解读应用内部的状态改变。此外,这样也让我们有机会去实现一些能记录每次状态改变,保存状态快照的调试工具。有了它,我们甚至可以实现如时间穿梭般的调试体验。
组件的关系
1,父传子 props
2,子传父 props 、@myevent(this.$emit( )) 、refs
3,非父子关系
App.vue 路由的slot
function A(){
return functionB(){
}
}
function A(){}
function B(){}
1,prototype Vue.prototype 事件总线
2、router push query ?id=xx
3、localstorage
html5 4g rust websembly
virtual dom + diff
vuex = redux ->flux
vue = angular1x + react
vue
angular tank
react AK47
VUEX 解决平行组件之间的数据共享问题,单例,观察者
redis maemcached
5步法
1,安装vuex npm install vuex -S,
把vuex作为 plugin安装到vue的原型 上。
2,使用vuex创建一个单例的store对象
使用store对象来管理组件中需要共享的状态
3,制订store中的管理规则
4,把创建好的store注册到Vue实例上
localstorage 方法:
单个xx.vue页面(需要两个不同的):
B:{ { num }}
vuex 方法:
【... —— 扩展运算符】
1、npm install vuex -S
2、main.js
import Vuex from "vuex" Vue.use(Vuex)
3、新建store文件夹,下index.js
import Vue from "vue" import Vuex from "Vuex" Vue.use(Vuex) //创建一个公共的store,用store来管理组件间需要共享的状态 //export default new Vuex.Store({}) let store = new Vuex.Store({ state:{ //store中需要共享的组件的状态 num:0, rice:"reice", eggs:"eggs" }, //store中的状态修改,需要通过store来完成, mutations:{ //用来更新的状态的地方 add:(state,data)=>{ return state.num++ //add 动作类型 {type:"add"} } }, actions:{ //接收组件的发送过来的请求,提交给mutations处理 inc:(store,payload)=>{ //component发送的一个动作类型 store.commit("add") //把动作类型{type:"add"} 提交到mutations } }, getters:{ //用来获取更新后的状态 getNum:(state)=>{ //通过getNum动作,获取最新的状态 num return state.num + 1000 } } }) export default store
4、main.js
import Vuex from "vuex" //安装了一个plugin //Vue extends Vuex Vue.use(Vuex) //Vue.install // 引用store import store from "./store" Vue.config.productionTip = false new Vue({ store, //vue.prototype.$store(相当于添加vue.prototype.$store) render: h => h(App) }).$mount('#app')
5、单个xx.vue页面(需要两个不同的):
A:{ { num }}
1、vuex使用场景
兄弟组件之间进行数据共享
2、vuex核心概念
store:vuex的对象
state:仓库管理的对象(shared states)
mutations:根据动作类型更改state,返回新的状态
actions:side effect(副作用),在mutation执行之前
getters:获取更新后的状态树
modules:分类对状态进行管理
plugins:插件(监听state的变化)