Vuex
Vuex是专为Vue.js开发的状态的vue插件
集中式管理多个组件共享状态和后台数据获取,可以实现实时数据更新
工作原理:
vuex
vue组件通过dispatch触发分发函数事件actions,通过commit触发mutations,然后通过mutate触发state,最后通过render影响组件
- state,给vue组件状态,$store.state或mapState()
- getters,给vue组件计算属性数据,$store.getters或mapGetters()
- actions,$store.dispatch()或mapActions(),
- mutations,被actions触发【commit()】,然后mutations直接更新状态state,
- devtool
- backend api
引入Vuex,
使用Vuex,
创建对象,const store=new Vuex.store({state:{count:0}})
注入
然后在任意组件中引入即可
可创建一个store来存放vuex
vuex和全局对象的区别
Vue.prototype.$hello=‘hello’
虽然任意地方都可以读到
{{this.$hello}},
但是全局对象不能改变想要的值,
vuex不允许在引用的时候修改内容,要在mutation中修改,而全局对象可以直接修改
State
引入mapState来辅助
computed中使用
…mapState([“count”,“userinfo”])读取vuex中存放的数据
mutations
和state同级,
在组件中,在methods中以字符串的表现形式,把vuex中的函数名称写在里面
载荷
可以传递参数
Mutation需要遵循的规则
mutation是唯一改变state状态的方案,action无法改变
最好提前写好store初始化的属性
要添加新属性,使用Vue.set(对象,属性,值),无论是vuex还是vue,都应该要这样用
例子
mutations必须是同步函数,如果要使用异步就使用action,
mutation也有辅助函数,mapMutation
state.userinfo.age是无法添加的,因为要用对象方法,Vue.set()
方法直接引用即可
action
action包含异步操作,action提交的是mutation,而不是直接变更状态
action中写入
然后methods中直接通过$store.dispatch引入
异步操作
可以用mapActions辅助函数
getters
数据过滤
直接引入getters里面的函数名称
若有参数
要用两个箭头函数嵌套
也可以用辅助函数
module
把state,mutations,actions,getters的都分别单独放在一个文件夹中的index.js的文件里
可以把觉得多余的放在module中
然后子组件读取,而操作的时候没有模块
插件
创建插件
然后在export中加入plugins
严格模式
只能通过mutations来改变值
若在组件中更改直接报错
打包的话写成这样,更改开发环境和发布环境
表单处理
v-model的方法
在state中定义message
然后在mutations中定义方法
热重载
方便了调试功能,可以不用