发布于 2021-06-12 06:20:54
如果要撤消顺序更改,则可以维护撤消堆栈。每次订单更改完成时,保存前一个data状态的副本。单击“撤消”按钮后,从“撤消”堆栈弹出进入data状态。
undoStack添加到状态。
state ={ data: range(1,5).map((el) => ({ name:tester-${el},age: el,class:Class-${el} })),undoStack:[],};data状态。在这里,我使用片只保留最后10个修订,但这可以调优,以满足您的需要。
_handleSort = ({ oldIndex,newIndex }) => { this.setState((prevState) => ({ data: arrayMove(prevState.data,oldIndex,newIndex),undoStack:...prevState.undoStack,prevState.data.slice(-10),});};onClick事件处理程序。
撤消= () => { this.setState(prevState => { if (prevState.undoStack.length) {返回{ data: prevState.undoStack.pop(),undoStack: prevState.undoStack,};}prevState{返回prevState;}) };.撤消重新排序演示
如果您不关心中间版本,而只是想要重置到原来的顺序,那么只需捕获原始订单的缓存并重置data即可。
const data = range(1, 5).map((el) => ({
name: `tester-${el}`,
age: el,
class: `Class-${el}`
}));
class App extends React.Component {
state = {
data,
originalData: data, // <-- store cache of original data
undoStack: []
};
...
<button
type="button"
onClick={() => {
this.setState({
data: this.state.originalData // <-- restore from cache
});
}}
>
Reset
</button>这两者都是在链接代码框中实现的。
https://stackoverflow.com/questions/67944712
复制相似问题