【问题标题】:Accessing Vuex state object property from component从组件访问 Vuex 状态对象属性
【发布时间】:2018-11-10 14:24:25
【问题描述】:

我正在尝试从组件更改状态对象属性的值,但找不到正确的方法

这是我的状态:

state: {
  articles: [ {
     title: "Lorem ipsum",
     position: 7
   }, {
     title: "Lorem ipsum",
     position: 8
   }
 ]
} 

在组件的计算属性中:

return this.$store.state.articles.filter((article) => {   
  return (article.title).match(this.search); /// just a search field,      don't mind it
  });

我想把每一个10岁以下的article.position改成article.position = +'0'article.position

我试过了:

let articlesList = this.$store.state.articles
if(articlesList.position < 10) {
  articlesList.position = +'0'articlesList.position
}

我知道这不是一个好方法,但这就是我所拥有的。有小费吗? :)

【问题讨论】:

  • 你应该只用突变来改变状态。 (vuex.vuejs.org/guide/mutations.html) 然后你可以用store.commit('ajustPosition')调用突变
  • 感谢您的帮助。我应该如何访问突变中的 state.articles.position?

标签: vue.js vuex


【解决方案1】:

您应该通过mutationaction 将所有 Vuex 状态更改代码放入 Vuex 存储本身。突变用于将更新所有反应组件的同步数据更改。操作用于异步事件,例如将状态更改持久化到服务器。

因此,当发生更改时,它应该调用组件上的一个方法,该方法应该反过来调用 Vuex 存储上的适当突变或操作。

你没有给出你的完整代码,但这里是一个假设的例子:

已编辑以反映有关从变异方法中访问数据的问题。

模板:

<input type="text" name="position" :value="article.position" @input="updatePosition">

组件上的方法:

methods: {
  updatePosition(e) {
     this.$store.commit('changeArticleOrder', article.position, e.target.value)
  }
}

Vuex 商店的突变:

mutations: {
  changeArticleOrder(state, oldPosition, newPosition) {
    for (var i = 0; i < 10; i++) {
      state.articles[i].position = i + 1;
      /* Or do whatever it is you want to do with your positioning. */
  }
}

【讨论】:

  • 感谢您的帮助。我只想在没有事件的情况下更改所有 article.position
  • 变异的第一个参数是一个state 对象,它应该被用来变异状态。更多内容Vuex documentation
猜你喜欢
  • 2019-04-23
  • 2021-09-23
  • 2020-07-28
  • 2020-05-01
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2021-06-01
  • 2020-12-05
相关资源
最近更新 更多