immutable js map 获取深层地图对象

immutable js map get deep map objects

我在 redux 状态下有一个来自连接的 React 路由器的不可变映射。

router: {
    location: {
      pathname: '/test',
      search: '',
      hash: '',
      state: {
        tokenIds: {
          size: 2,
          _map: {
            size: 2,
            _root: {
              ownerID: {},
              entries: [
                [
                  '70c48738',
                  true
                ],
                [
                  '1a8a6c24',
                  true
                ]
              ]
            },
            __altered: false
          }
        }
      },
      key: 'rkh3ve'
    },
    action: 'POP'
  }

我想提取 tokenIds 数组。我期待类似的东西 [70c48738,1a8a6c24].

我尝试了 state.getIn(['router','location','state','tokenIds') 但我得到的结果是

Map {size: 3, _root: ArrayMapNode, __ownerID: undefined, __hash: undefined, __altered: false}

嗯,这就是 ImmutableJS 的工作原理。通过调用 state.getIn(['router','location','state','tokenIds']) 您正在访问 ImmutableJS Map 实例,它不仅仅是一个 JS Map 或 JS 对象。您仍然需要对其进行处理以获得您想要的。检查 documentation on Map 以了解如何访问实际数据。

为了实现您的期望,您可以这样做:state.getIn(['router','location','state','tokenIds']).keySeq().toJS() - 这将 return 常规 JS 数组 Map 键。或者没有 toJS() 来获取 ImmutableJS Array 实例。