Tengo este problema realmente molesto, donde una función se ejecuta dos veces y estropea todo por eso.
He creado un arrastrar y soltar, y lo hago para las tareas en etapas. Puede mover una tarea dentro de una etapa, pero también pasar de una etapa a otra. La función está construida de la manera que, si el artículo de inicio y el artículo de destino son start < item <= destination , entonces los artículos entre ellos moverán su número de orden -1 , si es start > item >= destination entonces es +1 , todo otras instancias es +0 , por lo que no se actualiza en absoluto.
Ahora el problema es que mientras muevo un elemento a otro elemento, la función se ejecuta. en la primera ejecución, se actualiza correctamente , pero en la segunda ejecución, toma los valores actualizados y los actualiza nuevamente
Entonces, si tengo esta matriz [1, 2, 3] y muevo 1 a 3 , deberían actualizarse así
1 -> 3 (becomes destination order, so 3) 2 -> 1 (is start < current <= destination, so 2 - 1) 3 -> 2 (is start < current <= destination, so 3 - 1)Pero luego se actualiza de nuevo y el resultado final es así
1 -> 3 -> 3 2 -> 1 -> 0 3 -> 2 -> 1o algo como esto
1 -> 3 -> 3 2 -> 1 -> 0 3 -> 2 -> 0donde dos elementos tienen el mismo orden u otro valor, como -1. Es muy molesto y estropea todo. No tengo idea de cómo corregir este comportamiento.
Sandbox: https://codesandbox.io/s/drag-and-drop-order-issue-ikhyo?file=/src/Task.store.js:2195-2265 Puedes jugar en la vista previa, arrastrar y soltar funciona, pero con el problema descrito anteriormente.
La función se encuentra en Task.store.js:88
Una de las conjeturas que tengo es que, aunque todavía tengo el objeto en la mano, también mantiene el estado que tenía originalmente.