vuexwww.129028.com金沙

日期:2020-05-07编辑作者:Web前端

时间: 2019-09-10阅读: 218标签: vuex

Vuex介绍:

     Vuex官网:http://vuex.vuejs.org/

     Vuex是实现数据状态管理的技术,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

     Vuex适用场景:适用大型复杂的vue项目。

作为 Vue 全家桶的一员,Vuex 的重要性不言而喻,不管是用来管理状态,还是封装 Controler 都很好用。不过在一些体量较小的项目中,为了几个简单的状态或者处理函数而引入 Vuex,就像是高射炮打蚊子,大材小用了

Vuex使用:

     第一步:安装vuex命令:npm install vuex --save

     第二步:在src目录下创建一个store目录,并在其中创建index.js文件

                    添加如下代码:

                    import Vue from 'vue'

                    import VueX from 'vuex'

                    import state from './state'

                    Vue.use(VueX)

                    export default new VueX.Store({

                         state,

                         mutations

                    })

     第三步:在store目录下创建state.js文件

                    添加如下代码:

                    export default {

                        //userinfo为模拟数据

                        userinfo:{

                             name:"1504",

                             email:"1504@126.com",

                             company:"百度",

                             address:"北京海淀"

                         }

                    }

     第四步:在入口文件main.js引入store

                    //引入store

                    import store from './store'

                    new Vue({

                         ......

                         store

                    })

     第五步:在各组件中如何使用vuex

                    通过在computed计算属性中访问this.$store.state.数据

                    例如:

                    //渲染vuex里面的数据

                    computed:{

                         info(){

                              return this.$store.state.userinfo

                         }

                    }

这时候就可以模拟 Vuex,自己写一个简单的 Store, 用来管理状态并实时更新数据

Vuex修改数据:

     1、比较简单的方式:

          view组件提交mutations通过commit传值

          例如:this.$store.commit('MODIFY',name)

          mutations对象接收数据方式

          例如:

                   const mutations={

                         MODIFY(state, value) {

                              state.userinfo.name= value

                         }

                   }

     2、比较官方的方式:

           view->actions->mutations->state->view

           view通过dispatch提交到actions,actions通过commit提交到mutations,并最终修改state中的数据,来达到视图更新。为了简化vuex相关方法,让你少敲几个字母,提高开发体验

           view组件提交通过dispatch发送到actions

           例如:this.$store.dispatch('go',name)

           actions对象接收数据方式:

           例如:

                      const actions={

                           go({commit,state},value){

                                //actions通过commit提交到mutations

                                commit(“MODIFY”,value)

                           }

                      }

                      const mutations={

                           MODIFY(state, value) {

                                state.userinfo.name= value

                           }

                      }

一、构造函数

模拟 Vuex 的结构,创建一个 Class

export default class Store { constructor({ states, actions, mutations }) { // 状态 this.states = states || {}; // 异步函数 this.actions = actions || {}; // 同步函数 this.mutations = mutations || {}; } // 调用 mutations 中的同步函数 commit = (fun, params) = {}; // 调用 actions 中的异步函数 dispatch = (fun, params) = {}; // 更新 states 的状态 update = (key, value) = {};}

然后实例化一个 Store

import Store from './store';import states from './states';import actions from './actions';import mutations from './mutations';const store = new Store({ states, actions, mutations,});export default store;

然后挂到 vue 的原型上,通过 vue.$store 的方式使用,一个高仿 vuex 的架子就搭好了

// 在 main.js 中引入 Storeimport store from './store/index';Vue.prototype.$store = store;

二、实现操作函数(**commit、dispatch、update**)

在 Vuex 中,如果需要更新 state 中的状态,需要通过 commit 调用mutations 中的方法

而 mutations 的方法都具备一个默认的参数 state,因此 commit 方法可以这么写:

// 向 mutations 中的传入固定参数 statecommit = (fun, params) = { this.mutations[fun](this.states, params);};

不过由于一些历史遗留问题,我习惯用 this.states 的方式获取 state(这个习惯不好),所以改成了这样:

commit = (fun, params) = { if (fun) { this.mutations[fun].call(this, params); } else { return false; }};

类似的 actions 和 update 可以参考 commit 的写法

三、响应式对象

本文由www.129028.com金沙发布于Web前端,转载请注明出处:vuexwww.129028.com金沙

关键词:

nginx负载均衡如何实现www.129028.com金沙?

什么是nginx? Nginx是一个免费的,开源的,高性能的服务器和反向代理服务器软件,同时它也可以为IMAP和POP3服务器代...

详细>>

最少编码原则

这的确是大多数程序员,甚至是那些高级程序员都很容易混淆的一个重点。作为一名程序员,编写代码无疑是你职业...

详细>>

CSS中cursor 鼠标指针光标样式

值 前面url()是自定义鼠标的样式,图像的地址,后面的参数是 css 标准的 cursor样式,(IE下面可以不需要) 出现版本...

详细>>

AJAX:如何处理书签和后退按钮(1)

或者如果你不喜欢onclick: window.onload = initialize;function initialize() { // initialize the DHTML History // framework dhtmlHistory.initial...

详细>>