watch实现监听Vuex状态监听(利用computed)

Vuex 经过 store 选项,提供了一种机制将状态从根组件“注入”到每个子组件中(需调用 Vue.use(Vuex)):经过在根实例中注册 store 选项,该 store 实例会注入到根组件下的全部子组件中,且子组件能经过 this.$store 访问到

computed: {
    f1() {
        return this.$store.state.xxxx
  }
},
watch: {
    f1(curVal, oldVal) {
          //这里的curVal就是须要监听的值
    }
 }

computed 里通常写个函数,这个函数里必定是return一个结果。 这里你能够直接用f1做为本组件监听$store.state.xxxx, 也能够在本组件里声明一个变量而后再经过watch监听,将watch中的curVal赋值给该变量从而达到使用的目的。

当须要从vuex中获取的变量特别可能是,可使用mapState代替

当一个组件须要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,咱们可使用 mapState 辅助函数帮助咱们生成计算属性,让你少按几回键:vue

// 在单独构建的版本中辅助函数为 Vuex.mapStatevuex

import { mapState } from 'vuex'

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

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

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

当映射的计算属性的名称与 state 的子节点名称相同时,咱们也能够给 mapState 传一个字符串数组。数组

computed: mapState([
  // 映射 this.count 为 store.state.count
  'count'
])

对象展开运算符
mapState 函数返回的是一个对象。咱们如何将它与局部计算属性混合使用呢?一般,咱们须要使用一个工具函数将多个对象合并为一个,以使咱们能够将最终对象传给 computed 属性。可是自从有了对象展开运算符(现处于 ECMAScript 提案 stage-4 阶段),咱们能够极大地简化写法:函数

computed: {
  localComputed () { /* ... */ },
  // 使用对象展开运算符将此对象混入到外部对象中
  ...mapState({
    // ...
  })
}

站在巨人的肩膀上摘苹果:

连接:https://www.jianshu.com/p/b5365c05882b工具

相关文章
相关标签/搜索