当前位置:  开发笔记 > 编程语言 > 正文

vuejs 2如何从vuex中观察商店价值

如何解决《vuejs2如何从vuex中观察商店价值》经验,为你挑选了7个好方法。

我使用vuexvuejs 2在一起.

我是新手vuex,我想看一个store变量.

我想watch在我的功能中添加功能vue component

这是我到目前为止:

import Vue from 'vue';
import {
  MY_STATE,
} from './../../mutation-types';

export default {
  [MY_STATE](state, token) {
    state.my_state = token;
  },
};

我想知道是否有任何变化 my_state

我如何store.my_state在我的vuejs组件中观看?



1> Anastazy..:

比方说,例如,你有一篮水果,每次你从篮子里添加或删除水果,你想(1)显示有关水果数量的信息,你也(2)想要得到通知一些花哨时尚的水果数......

水果计数component.vue




请注意,watch对象中函数的名称必须与对象中函数的名称匹配computed.在上面的例子中,名称是count.

监视属性的新旧值将作为参数传递给监视回调(计数函数).

篮子商店看起来像这样:

水果basket.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const basket = new Vuex.Store({
  state: {
    fruits: []
  },
  getters: {
    fruitsCount (state) {
      return state.fruits.length
    }
  }
  // Obvously you would need some mutations and actions,
  // but to make example cleaner I'll skip this part.
})

export default basket

您可以在以下资源中阅读更多内容:

计算属性和观察者

API文档:计算

API文档:观看



2> Gabriel Robe..:

您不应该使用组件的观察者来听取状态变化.我建议您使用getter函数,然后将它们映射到组件中.

import { mapGetters } from 'vuex'

export default {
  computed: {
    ...mapGetters({
      myState: 'getMyState'
    })
  }
}

在你的商店:

const getters = {
  getMyState: state => state.my_state
}

您应该能够通过this.myState在组件中使用来收听对商店所做的任何更改.

https://vuex.vuejs.org/en/getters.html#the-mapgetters-helper


这个答案是错的.他实际上需要观察计算属性.
一旦被调用,getter将只检索当时的状态.如果您希望该属性反映其他组件的状态更改,则必须观察它.
为什么“您不应该使用组件的观察程序来监听状态变化”?这是您可能没有想到的示例,如果我想从状态中监视令牌以及何时更改令牌以重定向到另一个页面。因此,在某些情况下您需要这样做。也许您需要更多的经验才能知道这一点。

3> GONG..:

如上所述,直接在商店中观看更改并不是一个好主意

但在一些非常罕见的情况下,它可能对某人有用,所以我会留下这个答案.对于其他情况,请参阅@ gabriel-robert回答

你可以通过这样做state.$watch.created在组件中的(或者您需要执行此操作的方法)方法中添加此方法

this.$store.watch(
    function (state) {
        return state.my_state;
    },
    function () {
        //do something on data change
    },
    {
        deep: true //add this if u need to watch object properties change etc.
    }
);

更多细节:https://vuex.vuejs.org/en/api.html#vuex-store-instance-methods


@GabrielRobert我认为两者都有一席之地.如果您需要根据模板条件进行反应性更改,则使用带有mapState的计算值等是有意义的.但是否则,就像组件中的均匀流量控制一样,您需要一个完整的手表.你是对的,你不应该使用普通的组件观察者,而是状态.$ watch是为这些用例设计的
每个人都提到它,但没有人说出原因!我正在尝试构建一个在更改时与数据库自动同步的vuex存储.我觉得商店里的观察者是最无摩擦的方式!你怎么看?仍然不是一个好主意?
我不认为直接观察州是个好主意.我们应该使用吸气剂.https://vuex.vuejs.org/en/getters.html#the-mapgetters-helper

4> yeahdixon..:

我认为提问者想要使用Vuex手表.

this.$store.watch(
      (state)=>{
        return this.$store.getters.your_getter
      },
      (val)=>{
       //something changed do something

      },
      {
        deep:true
      }
      );



5> dube..:

这适用于所有无法用吸气剂解决问题并真正需要观察者的人,例如与非第三方的东西交谈(请参阅Vue Watchers何时使用观察者).

Vue组件的观察者和计算值都适用于计算值.所以与vuex没什么不同:

import { mapState } from 'vuex';

export default {
    computed: {
        ...mapState(['somestate']),
        someComputedLocalState() {
            // is triggered whenever the store state changes
            return this.somestate + ' works too';
        }
    },
    watch: {
        somestate(val, oldVal) {
            // is triggered whenever the store state changes
            console.log('do stuff', val, oldVal);
        }
    }
}

如果它只是关于组合本地和全局状态,mapState的doc也提供了一个例子:

computed: {
    ...mapState({
        // to access local state with `this`, a normal function must be used
        countPlusLocalState (state) {
          return state.count + this.localCount
        }
    }
})


如果它是在文档中,它不是一个黑客,是吗?但是,它也不是vue/vuex的支持者

6> micah5..:

就像这样简单:

watch: {
  '$store.state.drawer': function() {
    console.log(this.$store.state.drawer)
  }
}



7> Mukundhan..:

通过观察和设置值更改来创建商店变量的Local状态。这样,表单输入v模型的局部变量更改不会直接更改存储变量

data() {
  return {
    localState: null
  };
 },
 computed: {
  ...mapGetters({
    computedGlobalStateVariable: 'state/globalStateVariable'
  })
 },
 watch: {
  computedGlobalStateVariable: 'setLocalState'
 },
 methods: {
  setLocalState(value) {
   this.localState = Object.assign({}, value);
  }
 }

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有