我正在尝试从一个操作中访问状态信息。状态是具有ID属性的对象数组。
在检查变量时
state.devices
在一次行动中,我只看到:
从mutator中检查同一个变量可以确切地显示出我希望看到的内容:
这里有一个简短的片段,举例说明各种尝试。对不起,它不能运行。
const state = {
devices: {}
};
const getters = {
devices: state => state.devices || {}
};
const actions = {
[DEVICE_EVENT_ACTION]: ({ commit }, event) => {
// Attempt 0: exits prematurely
let storedDevice0 = getters
.devices(state)
.find(d => d.deviceId === event.deviceId);
// Attempt 1: exits prematurely
let storedDevice1 = JSON.parse(JSON.stringify(state.device)).find(
x => x.deviceId === event.deviceId
);
// Attempt 2: exits prematurely
let storedDevice2 = state.devices.find(x => x.deviceId === event.deviceId);
// Attempt 3: exits prematurely
let storedDevice3;
for (let d in state.devices) {
if (state.devices[d].deviceId === event.deviceId) {
storedDevice3 = state.devices[d];
}
}
console.log(storedDevice0); // nothing
console.log(storedDevice1); // nothing
console.log(storedDevice2); // nothing
console.log(storedDevice3); // nothing
commit(DEVICE_UPDATED, event);
}
};
const mutations = {
[DEVICE_UPDATED](state, event) {
// Attempt 0
let storedDevice0 = getters
.devices(state)
.find(d => d.deviceId === event.deviceId);
// Attempt 1
let storedDevice1 = JSON.parse(JSON.stringify(state.devices)).find(
x => x.deviceId === event.deviceId
);
// Attempt 2:
let storedDevice2 = state.devices.find(x => x.deviceId === event.deviceId);
// Attempt 3
let storedDevice3;
for (let d in state.devices) {
if (state.devices[d].deviceId === event.deviceId) {
storedDevice3 = state.devices[d];
}
}
console.log(storedDevice0); // works
console.log(storedDevice1); // works
console.log(storedDevice2); // works
console.log(storedDevice3); // works
}
};
我在文件中找不到任何提到这一点的地方。为什么会有所不同,如何在操作中访问状态列表属性?我的选择背后的逻辑是,我的行为可以更具体,它称为一个更通用的“设备更新”调制器,它允许我用状态数据中不存在的相关数据来记录和通知用户,但确实存在于商店中。
device
阵列。