我有我的应用程序的主屏幕,其中有许多不同的部分。用户可以将element
从部分拖到部分。
我遇到的问题是,一旦用户将一个元素拖放到一个新的部分(使用更新的信息击中服务器),该元素将显示两次,一次出现在它的位置从开始,一次在拖到的地方。
刷新我的应用后,它只显示在被拖动的位置,这是正确的。
我认为问题出在我的recieveElement
reducer中,在服务器更新后会被点击。
在调试时会有一些帮助。谢谢!
case 'receiveElement':
const elementId = `${action.element.id}`;
// don't add, duplicate
const newState = {...state}; // copy old state
delete newState[elementId]; // delete the item from the object
const newVisibleElementIds = newState.visibleElements.filter(id => id !== elementId); // remove item from visible elements
const newUnplacedElementIds = newState.unplacedElements.filter(id => id !== elementId);
return {
...newState,
elementsMap: {
...newState.elementsMap,
[elementId]: action.element,
},
visibleElements: [...newVisibleElementIds, elementId],
unplacedElements: [...newUnplacedElementIds],
};
在我的SkyElement
反应对象中,我有以下内容,这是在命中减速器之前命中服务器
endDrag(props, monitor) {
if (monitor.didDrop()) {
const result = monitor.getDropResult();
if (result.sectorId) {
const obj = { id: props.id, sectorId: result.sectorId, slotId: result.slotId };
props.dispatch(requestUpdateElement(obj));
}
}
},