Я выполнил функцию реактивного перетаскивания в свой проект, так что я могу изменить порядок строк в списке реактивной таблицы. Проблема в том, что у меня есть столбец с именем «Последовательность», который показывает мне порядок элементов, что я не могу обновить его значения.
Пример:
до (строки можно перетаскивать):
Sequence | Name
1 Jack
2 Angel
после (мне нужно обновить значения последовательности, где я изменяюих позиция после удаления определенной перетаскиваемой строки, в этом случае я перетащил Джека на первую позицию и опустил его на вторую):
Sequence | Name
1 Angel
2 Jack
React / Redux позволяет мне изменять порядок индексаэтого массива элементов, без получения сообщения об ошибке «Обнаружена мутация состояния между отправками», но это не позволяет мне обновить значения последовательности с новыми значениями порядка.
Это то, что я пробовал до сих пор:
// within the parent class component
// item is an array of objects from child
UpdateSequence(startIndex, endIndex, item) {
// the state.Data is already an array of object
const result = this.state.Data;
const [removed] = result.splice(startIndex, 1);
result.splice(endIndex, 0, removed);
// this is working without the mutation state error
this.setState({ Data: result })
let positionDiff = 0;
let direction = null;
let newIndex = 0;
positionDiff = endIndex - startIndex;
if (startIndex > endIndex) {
direction = "up";
}
else if (startIndex < endIndex) {
direction = "down";
}
if (positionDiff !== 0) {
for (var x = 0; x <= Math.abs(positionDiff); x++) {
if (x === 0) {
newIndex = startIndex + positionDiff - x;
this.setState(prevState => ({
Data: {
...prevState.Data,
[prevState.Data[newIndex].Sequence]: Data[newIndex].Sequence + positionDiff
},
}));
}
else {
if (direction === "down") {
newIndex = startIndex + positionDiff - x;
this.setState(prevState => ({
Data: {
...prevState.Data,
[prevState.Data[newIndex].Sequence]: Data[newIndex].Sequence - 1
},
}));
}
else if (direction === "up") {
Data= startIndex + positionDiff + x;
this.setState(prevState => ({
Data: {
...prevState.Data,
[prevState.Data[newIndex].Sequence]: Data[newIndex].Sequence + 1
},
}));
}
}
}
// so when i call save action i am stepping into the 'A state mutation was detected between dispatches' error message.
this.props.actions.saveSequence(this.state.Data)
.then(() => {
this.props.actions.loadData();
})
.catch(error => {
toastr['error'](error, 'error....');
})
}
Вызывая действие 'saveSequence' всякий раз, когда я пытаюсь обновить элемент массива 'Sequence', я получаю 'Между сообщениями об ошибках отправлений была обнаружена мутация состояния.
Любая помощь будет отличной! Спасибо!
примечание: логика, примененная для изменения порядка последовательности, в порядке.