如何将键值对添加为 OrderedMap 中的最后一个条目..?
How to add key value pair as last entry in OrderedMap..?
可能重复:
使用 redux store 和 Immutable js OrderedMap.
Redux 存储结构:
{
"app": {
"name": "Test app",
"dataPack":{
"chemID": "aaaa",
"item": {
"yp57m359": {
"solid": 33,
"liquid": 45,
"gas": 65
},
"h58wme1y": {
"solid": 87,
"liquid": 9,
"gas": 30
},
"dff56fhh": {
"solid": 76,
"liquid": 43,
"gas": 77
}
}
}
}
}
减速机代码:
return state.setIn(["app","dataPack","item",action.item_id],
fromJS({
"solid": action.soildVal,
"liquid": action.liquidVal,
"gas": action.gasVal
}));
其中 action.item_id
是随机 ID(每个项目的键)。
以上代码非常适合添加项目。
问题是: 项目存储在随机位置。我需要保留我添加的顺序。需要将每个项目添加为 last entry inside item
。一项一项添加的顺序不一样
帮我找到一个明确的解决方案。
OrderedMap
会记住你放入东西的顺序。每次您在 OrderedMap 上使用新的 key
调用 .set(key, value)
时,它都会被添加到末尾。
let state = Immutable.Map({
"app": Immutable.Map({
"name": "Test App",
"dataPack": Immutable.Map({
"chemId": "aaaa",
"items": Immutable.OrderedMap({}) // this is the thing we want ordered
})
})
});
state = state.setIn(['app', 'dataPack', 'items', 'yp57m359'], Immutable.Map({
'first': 'item'
}));
state = state.setIn(['app', 'dataPack', 'items', 'h58wme1y'], Immutable.Map({
'second': 'item'
}));
state = state.setIn(['app', 'dataPack', 'items', 'dff56fhh'], Immutable.Map({
'third': 'item'
}));
console.log(state.toJS()); // notice things are in order
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>
很难准确判断你的问题出在哪里,因为我们看不到你是如何创建你的商店的,但我的猜测是 "item"
指向一个普通的旧 Map
而不是一个 OrderedMap
。如果您只是使用 fromJS(data)
创建您的状态,它将默认使用 Map
而不是 OrderedMap
.
可能重复:
使用 redux store 和 Immutable js OrderedMap.
Redux 存储结构:
{
"app": {
"name": "Test app",
"dataPack":{
"chemID": "aaaa",
"item": {
"yp57m359": {
"solid": 33,
"liquid": 45,
"gas": 65
},
"h58wme1y": {
"solid": 87,
"liquid": 9,
"gas": 30
},
"dff56fhh": {
"solid": 76,
"liquid": 43,
"gas": 77
}
}
}
}
}
减速机代码:
return state.setIn(["app","dataPack","item",action.item_id],
fromJS({
"solid": action.soildVal,
"liquid": action.liquidVal,
"gas": action.gasVal
}));
其中 action.item_id
是随机 ID(每个项目的键)。
以上代码非常适合添加项目。
问题是: 项目存储在随机位置。我需要保留我添加的顺序。需要将每个项目添加为 last entry inside item
。一项一项添加的顺序不一样
帮我找到一个明确的解决方案。
OrderedMap
会记住你放入东西的顺序。每次您在 OrderedMap 上使用新的 key
调用 .set(key, value)
时,它都会被添加到末尾。
let state = Immutable.Map({
"app": Immutable.Map({
"name": "Test App",
"dataPack": Immutable.Map({
"chemId": "aaaa",
"items": Immutable.OrderedMap({}) // this is the thing we want ordered
})
})
});
state = state.setIn(['app', 'dataPack', 'items', 'yp57m359'], Immutable.Map({
'first': 'item'
}));
state = state.setIn(['app', 'dataPack', 'items', 'h58wme1y'], Immutable.Map({
'second': 'item'
}));
state = state.setIn(['app', 'dataPack', 'items', 'dff56fhh'], Immutable.Map({
'third': 'item'
}));
console.log(state.toJS()); // notice things are in order
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>
很难准确判断你的问题出在哪里,因为我们看不到你是如何创建你的商店的,但我的猜测是 "item"
指向一个普通的旧 Map
而不是一个 OrderedMap
。如果您只是使用 fromJS(data)
创建您的状态,它将默认使用 Map
而不是 OrderedMap
.