我可以在 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。
登录authority_count
[HMR] Waiting for update signal from WDS...
getters.dataView: null
state.pack.authority_count: 5
链接项目有两个问题:
- Vuex 状态的更改(例如
arrayBuffer
)只能在 Vuex 变更中进行:
mutations: {
setArrayBuffer(state, payload) {
state.arrayBuffer = payload;
}
},
并这样称呼它:
reader.onload = (event) => {
this.$store.commit('setArrayBuffer', event.target.result);
}
- 组件的
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
做同样的事情。
我在 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。
登录authority_count
[HMR] Waiting for update signal from WDS...
getters.dataView: null
state.pack.authority_count: 5
链接项目有两个问题:
- Vuex 状态的更改(例如
arrayBuffer
)只能在 Vuex 变更中进行:
mutations: {
setArrayBuffer(state, payload) {
state.arrayBuffer = payload;
}
},
并这样称呼它:
reader.onload = (event) => {
this.$store.commit('setArrayBuffer', event.target.result);
}
- 组件的
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
做同样的事情。