javascript - 如何从操作中访问状态属性?
问题描述
我正在尝试从动作中访问状态中的信息。状态是具有 ID 属性的对象数组。
从 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
数组中。
解决方案
推荐阅读
- html - HTML CSS 悬停位置未与容器对齐
- redhat - Linux中的SWAP和Virtual mmeory有什么区别
- sql - 变更数据捕获 - 监控单列
- qt - QNetworkReply 正在读取数据时,QMainWindow 关闭按钮处于非活动状态
- python - 如何在 Selenium Webdriver 上为 python 中的 chrome 设置 luminati 代理?
- swift - Swift:面向协议的方法期间出错。错误:无法将“I.Job”类型的返回表达式转换为“ActualJob”类型
- google-bigquery - 如何在 Google BigQuery 中的 CREATE OR REPLACE TABLE 之后立即执行 INSERT INTO 语句
- c# - 应用内购买验证使用购买令牌谷歌播放商店使用 C#
- c# - 注入具有与更高级别类相同的构造函数参数的依赖项
- ethereum - 在solidity中创建一个新的固定大小的数组