Вам не нужно использовать toObject()
, если вы используете React.
Будет гораздо проще сохранить историю состояния (состояние компонента реакции, состояние редукции или любое другое состояние, которое вы используете).И осуществите отмену / повтор с ним.
Простейшая демонстрация отмены:
let history = [{
x: 20,
y: 20
}];
let historyStep = 0;
class App extends Component {
state = {
position: history[0]
};
handleUndo = () => {
if (historyStep === 0) {
return;
}
historyStep -= 1;
this.setState({
position: history[historyStep]
});
};
handleDragEnd = e => {
history.slice(0, historyStep);
history = history.concat({
x: e.target.x(),
y: e.target.y()
});
historyStep += 1;
console.log(history[history.length - 1]);
this.setState({
position: history[history.length - 1]
});
};
render() {
return (
<Stage width={window.innerWidth} height={window.innerHeight}>
<Layer>
<Text text="undo" onClick={this.handleUndo} />
<Rect
x={this.state.position.x}
y={this.state.position.y}
width={50}
height={50}
fill="black"
draggable
onDragEnd={this.handleDragEnd}
/>
</Layer>
</Stage>
);
}
}
https://codesandbox.io/s/3x3rwnlykp