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
实例。
我在 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
实例。