vue.js - Vuex - 仅将突变暴露给 Action

标签 vue.js action visibility vuex mutation

我想使用 Vuex 来存储有关我的客户端-服务器通信的状态,例如搜索逻辑:

// status is either synching|synched|error
state: { query:"", result:[], status:"synching" } 

我执行搜索操作。 Action 只能通过突变修改状态:

function search(context, query) {
    context.commit("query", query);
    context.commit("status", "synching");

    // some asynch logic here
    ...
        context.commit("result", result);
        context.commit("status", "synched");
    ...
}

但是,现在突变也暴露给了我的组件,它们现在能够使我的状态不一致。是否可以隐藏组件的突变?

最佳答案

Action 可以直接改变状态。无需创建任何其他东西,以后可能会以错误的方式使用。直接使用 Action 即可。

var store = new Vuex({
  state: {
    something: ''
  },
  actions: {
    async updateSomethingAsynchronnousWay ({state}, payload) {
      var response = await axios.get(payload.src)
      state.something = response.data.anyKey
    }
  }
})

new Vue({
  store
  el: '#app',
  created () {
    this.$store.dispatch({
      type: 'updateSomethingAsynchronnousWay,
      src: 'https//your.rest.api/something'
    })
  }
})

关于vue.js - Vuex - 仅将突变暴露给 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47052456/

相关文章:

javascript - vue.js 中同级组件之间的两种方式绑定(bind)

vue.js - VueJs,Vue-chartjs - 变异 Prop

javascript - 如何检查元素是否隐藏在 jQuery 中?

artificial-intelligence - 如何检查一个游戏对象是否可以看到另一个?

javascript - 这些导出在功能上是否相同?

javascript - Vuejs : Vue. 组件似乎不起作用

php - ZF2 - 从路线生成网址

android - 为什么我的可搜索 Activity 的 Intent.getAction() 为空?

Android Intent 有时是 "handled"而不是 ACTION_SEND

java - 同时写入数组时的可见性问题