【问题标题】:Vuex big array processing via mutations and actions通过突变和动作处理 Vuex 大数组
【发布时间】:2018-08-22 09:07:19
【问题描述】:

我有一个必须处理的大约 1k...10k 个元素的数组。 该数组以 Vuex 状态存储。 用户应该能够处理单个元素或处理所有元素。 起初,当数组非常小时,我使用突变处理单个元素,使用动作处理所有元素。 所以代码是这样的:

new Vuex.Store({
  state: {
    array: [el1, el2, el3...]
  },
  mutations: {
    processEl: (state, el) => {
      ...
    }
  },
  actions: {
    processAll: context => {
      context.state.array.forEach(el => context.commit('processEl', el))
    }
  }
})

不幸的是,随着数组不断增长,动作性能越来越差,所以我找到了解决方案:

new Vuex.Store({
  state: {
    array: [el1, el2, el3...]
  },
  mutations: {
    processEl: (state, el) => {
      ...
    },
    processAll: (state, el) => {
      function processEl (el) {
        ...
      }
      state.array.forEach(el => processEl(el))
    }
  }
})

它工作得更好,但有没有更优雅的解决方案可以让我不重复 processEl 函数内容?

【问题讨论】:

    标签: vue.js vuex


    【解决方案1】:

    您可以在外部范围内定义processEl 函数,以便可以从processElprocessAll 调用它。

    function processEl (state, el) {
        ...
    }
    
    new Vuex.Store({
        state: {
            array: [el1, el2, el3...]
        },
        mutations: {
            processEl,
            processAll (state) {
                state.array.forEach(el => processEl(state, el))
            }
        }
    })
    

    【讨论】:

    • 谢谢,工作得很好,即使它是processEl (state, el) { ... } 的功能,所以我不确定state.array.forEach(processEl) 是否会按预期工作。
    • 哦,你是对的,processEl 必须访问state。我已经编辑了我的答案。谢谢!
    猜你喜欢
    • 2020-12-17
    • 2017-01-10
    • 2019-03-15
    • 2020-08-27
    • 2018-10-03
    • 2016-11-16
    • 2020-06-06
    • 2020-11-06
    相关资源
    最近更新 更多