代码之家  ›  专栏  ›  技术社区  ›  erodewald

如何从操作访问状态的属性?

  •  1
  • erodewald  · 技术社区  · 7 年前

    我正在尝试从一个操作中访问状态信息。状态是具有ID属性的对象数组。

    在检查变量时 state.devices 在一次行动中,我只看到: state.devices from an action

    从mutator中检查同一个变量可以确切地显示出我希望看到的内容: state.devices from a 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 阵列。

    0 回复  |  直到 7 年前
    推荐文章