【问题标题】:Array .find() method parameter undefined in vuex数组.find()方法参数在vuex中未定义
【发布时间】:2020-04-15 04:20:23
【问题描述】:

我一直在努力使用 vuex getter 中的 .find() 方法。

我建立了一个商店,列表处于状态(页面)

// state.js
const state = {
  pages: [{id:1, content:"Page 1"}, {id:2, content:"Page 2"}]
};

还有一个带有 find 方法的 getter,比如这篇文章:Reference

// getters.js
const getters = {
  indexPage: state => {
    let indexPage = state.pages.find(function(page) { // same error with arrow function
      return page.id === 1;
    });
    return indexPage !== undefined ? indexPage : null;
  }
}

我希望返回第一个对象,但在我将 getter(使用 mapGetters)映射到组件后,它会抛出此错误。

TypeError: "page is undefined"

我也用.filter() 方法(返回一个数组)尝试了相同的代码,但它确实可以正常工作而没有任何错误。此代码有效:

const getters = {
  indexPage: state => {
    let indexPage = state.pages.filter(page => page.id === 1);
    return indexPage[0];
  }
}

【问题讨论】:

  • 运行console.log(state.pages);会得到什么
  • 列表,页面。但有趣的是,它修复了它(尽管有一个控制台语句并且 ESLint 快疯了)。编辑:我的意思是修复它,不会引发错误并将数据传递给组件。

标签: javascript vue.js vuex


【解决方案1】:

尝试:

const getters = {
  indexPage: state => page => state.pages.find(p => p.id === page)
}

更新:使用 mapGetters

const store = new Vuex.Store({
  state: {
    pages: [
      {id:1, content:"Page 1"}, 
      {id:2, content:"Page 2"}
    ]
  },
  getters: {
    indexPage: state => page => state.pages.find(p => p.id === page)
  }
})

const mapGetters = Vuex.mapGetters

new Vue({
  el: '#app',
  store,
  mounted () {
    console.log(this.indexPage(1))
  },
  computed: {
    ...mapGetters([
      'indexPage'
    ])
  }
})
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://unpkg.com/vuex"></script>
<div id="app"></div>

【讨论】:

  • 同样的结果。是我尝试的第一件事,并把我带到了那个意大利面条代码
  • 你怎么称呼你的吸气剂?
  • 那么indexPage 将返回Function 而不是页面,对吗?
  • 那里将返回与页面参数具有相同id的对象
  • 是的,然后我传递 id (1)。返回未定义。
猜你喜欢
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多