【问题标题】:Push to vuex store array not working in VueJS推送到 Vuex 存储数组在 VueJS 中不起作用
【发布时间】:2017-06-09 09:38:56
【问题描述】:

我正在使用 Vuex 显示来自“store.js”的用户列表。那个js文件有这样的数组。

var store = new Vuex.Store({
  state: {
    customers: [
      { id: '1', name: 'user 1',},
    ]
  }
})

我想在同一个数组中插入一组新值

{ id: '1', name: 'user 1',}

上面的值是从一个 URL (vue-resource) 获得的。下面是将获取的数据推送到数组的代码。但是,数据没有插入

mounted: function() {
      this.$http.get('http://localhost/facebook-login/api/get_customers.php')
      .then(response => {
        return response.data;
      })
      .then(data => {
        store.state.customers.push(data) // not working!!
        console.log(data) // prints { id: '2', name: 'User 2',}
        store.state.customers.push({ id: '2', name: 'User 2',})
      });
    }

【问题讨论】:

  • get_customers.php 返回一个数组还是单个用户?
  • 这样放行吗? store.state.customers.push({data})
  • @rogeriolino 实际上它应该返回整个用户数组。但是返回单用户也足够了。我都在尝试。他们都没有工作
  • @Miguel 试过了。不工作

标签: javascript arrays vue.js vuejs2 vue-resource


【解决方案1】:

您正在尝试从 vue 组件修改 vuex 状态,您不能这样做。您只能从 mutation 修改 vuex 存储

你可以像下面这样定义一个突变:

var store = new Vuex.Store({
  state: {
    customers: [
      { id: '1', name: 'user 1',},
    ]
  },
  mutations: {
     addCustomer (state, customer) {
      // mutate state
      state.customers.push(customer)
    }
  }
})

现在你可以从 vue 实例提交这个变更,如下所示:

mounted: function() {
      this.$http.get('http://localhost/facebook-login/api/get_customers.php')
      .then(response => {
        return response.data;
      })
      .then(data => {
        store.commit('addCustomer', { id: '2', name: 'User 2'})
      });
    }

【讨论】:

  • 这不是真的。可以从 Vue 组件更改 vuex 存储中的值。我已经做到了。例如:“store.state.something = 1”将起作用
  • @GijoVarghese docs 中的第一行说:“在 Vuex 存储中实际更改状态的唯一方法是提交突变。”
  • 无论如何感谢@Saurabh,我终于想通了。从错误的 url 返回的 json 的语法。那是错误!它返回名称而不是“名称”
  • @GijoVarghese 当您直接在 vue 组件中修改有状态数据时,vuex 的全部目的就失去了......
  • 它可能有效,但它属于“未定义行为”类别。它是对框架的滥用,一旦开发人员意识到可能存在漏洞,您可以期望它几乎停止工作,因为 正确 行为是抛出错误并尝试阻止它。
猜你喜欢
  • 2020-08-24
  • 2011-03-12
  • 2016-12-16
  • 2020-10-03
  • 1970-01-01
  • 2018-11-10
  • 2021-12-21
  • 1970-01-01
  • 2016-01-05
相关资源
最近更新 更多