#reactjs #react-state
#reactjs #состояние реакции
Вопрос:
Я пытаюсь реализовать простую функцию отмены / повтора в моем приложении react. Итак, я пытаюсь сохранить массив со старыми значениями состояния. Но когда я проверяю значения старых состояний, все они обновляются с новым состоянием.
состояние :
state = {
schedule : [],
loads:[],
undo:[],
redo:[]
};
const redoUndoObj ={
oldStateSchedule : [...this.state.schedule],
oldStateLoads : [...this.state.loads]
}
this.setState({ undo : [ ...this.state.undo , redoUndoObj]});
Комментарии:
1. Мне бы хотелось увидеть больше кода, прежде чем я смогу дать какой-либо хороший совет.
2. Моя идея состоит в том, чтобы получить последнее состояние из массива отмены и обновить его вместе с ним, к сожалению, я застрял здесь
3. Надеюсь, мой ответ ниже даст вам идеи о том, как решить эту проблему.
Ответ №1:
Я надеюсь, что это даст вам представление о том, как решить эту проблему. Я создал код только для отмены сейчас, чтобы указать вам правильное направление. Этот пример я сделал с помощью функционального компонента React, используя useState
вместо Component class .
const [schedule, setSchedule] = useState([]);
const [loads, setLoads] = useState([]);
const [undo, setUndo] = useState([]);
const [redo, setRedo] = useState([]);
const updateData = (newSchedule, newLoads) => {
setSchedule([...newSchedule]);
setLoads([...newLoads]);
const newUndo = {
schedule: [...newSchedule],
loads: [...newLoads],
};
setUndo([...undo, ...newUndo]);
}
const undoChanges = () => {
const lastElement = undo[undo.length - 1];
const copyOfUndo = [...undo];
// Update redo to be able to rollback
setRedo([...undo]);
// Set the previous values to Schedule and Loads
schedule([...lastElement.schedule]);
loads([...lastElement.loads]);
// Remove the last element from undo
lastElement.pop();
undo([...lastElement]);
}