我可以在 vuex 中更改另一个 getter 时重新计算 getter 吗?

Can I make a getter recomputed when another getter changed in vuex?

我在 vuex 中使用这个 getter:

authority_count (state, getters) {
      return getters.dataView?.getUint16(4, true) || state.pack.authority_count;
}

当 dataView 为 null 时,我希望 authority_count 为 state.pack.authority_count,并且在页面中加载文件后,我希望在加载完成时重新计算 authority_count ,在 dataView 填充了从文件加载的数据之后。我怎样才能使这项工作?

问题是当我制作 getters.dataView return DataView 时,authority_count 仍然 returns state.pack.authority_count.


使用文件输入从文件中获取二进制数据,并填充到arrayBuffer中,通过dataView访问getter。

Loading arrayBuffer

Loading dataView

登录authority_count

[HMR] Waiting for update signal from WDS...
getters.dataView:  null
state.pack.authority_count:  5

链接项目有两个问题:

  1. Vuex 状态的更改(例如 arrayBuffer)只能在 Vuex 变更中进行:
mutations: {
  setArrayBuffer(state, payload) {
    state.arrayBuffer = payload;
  }
},

并这样称呼它:

reader.onload = (event) => {
  this.$store.commit('setArrayBuffer', event.target.result);
}
  1. 组件的 arrayBuffer 必须经过计算才能与 Vuex 保持同步:
data () {
  return {
    pack: this.$store.state.pack
  }
},
computed: {
  arrayBuffer() { // You could use `mapState` instead, same thing
    return this.$store.state.arrayBuffer
  },
  buffer () {
    return [...new Uint8Array(this.arrayBuffer)]
      .map (b => b.toString(16).toUpperCase().padStart(2, '0'));
  }
},

如果你想让它与 Vuex 同步,你需要对 pack 做同样的事情。