可能重复: Add an Item in OrderedMap with Immutable.js
使用 redux商店和不可变的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(每个项目的键)。
以上代码适用于添加项目。
问题是:存储在随机位置的项目。我需要保留我要添加的订单。需要在item
内添加每个项目为最后一个条目。逐个添加项目的顺序不一样。
帮助我找到一个明确的解决方案。
答案 0 :(得分:0)
$.ajax({
url: "https://igpi.ga/explore/tags/yyc/media",
dataType: "jsonp",
data: { count: 3 },
success: function (json){
for(var i in json.posts) {
var img = document.createElement("IMG");
img.src = json.posts[i].display_url;
document.body.appendChild(img);
}
}
});
会记住你把东西放进去的顺序。每当您在OrderedMap上使用新的OrderedMap
调用.set(key, value)
时,它都会被添加到结尾。
key

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>
指向常规的{{1}而不是"item"
。如果您仅使用Map
创建州,则默认使用OrderedMap
代替fromJS(data)
。