Kelichao / vue.js.2.0

针对vue2.0版本,以及关于MVVM框架学习,使用中的总结,附带backbone.js框架的思想与使用方法做使用记录,以及去年学过的backbone相关MVC框架学习总结与demo笔记思想设计模式 20170-01-12
40 stars 6 forks source link

【Vuex】使用 #30

Open Kelichao opened 6 years ago

Kelichao commented 6 years ago

科普

// 如果在模块化构建系统中,请确保在开头调用了 Vue.use(Vuex),调用了才能通过 this.$store访问 Vue.use(Vuex)

window.store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } } })

// 触发方法 store.commit('increment')

// 取得值 store.state.count// 1


- 如果注册在了vue实例中,则可以用 this.$store.state获取数据源

# 五个核心概念

- State : 在 Vue 组件中获得 Vuex 状态
- Getter: 可以认为是 store 的计算属性(返回值会根据它的依赖被缓存起来)
- Mutation:Vuex 中的 mutation 非常类似于事件,用来进行对数据的改变
- Action:类似于 mutation,不同在于1.Action 提交的是 mutation,而不是直接变更数据状态。2.可以包含任意异步操作。
- Module:Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter

# state 详情
```js
// 最基础取法
this.$store.state.count

// 批量取,使用mapState 辅助函数
// 这家伙一般返回的是一个对象,平时都放在计算属性里
      // obj: {
        //     fn1: function() {

        //     },
        //     fn2: function() {

        //     }
        // }

 mapState({
    // 箭头函数可使代码更简练
    count: state => state.count,

    // 传字符串参数 'count' 等同于 `state => state.count`
    countAlias: 'count',

    // 为了能够使用 `this` 获取局部状态,必须使用常规函数
    countPlusLocalState (state) {
      return state.count + this.localCount
    }
  })

mapState 用法1,当方法调用

        methods: {
            ...mapGetters({
                operuserStations: "recordoperuserStations"
            }),
        }

mapState用法2,计算属性

computed: mapState({
                operuserStations: "recordoperuserStations"
                }),
      )

独立使用

import { mapGetters, mapActions } from 'vuex';
var userDataCont = mapGetters({
    userData: 'recorduserData',
});
// 注意,要指向vue实例,不然报getter不存在
console.log(userDataCont.userData.call(vue).userCode);
Kelichao commented 4 years ago

vue.use(vuex)