undo/redo functionality with React Hooks
npm install use-undoundo/redo functionality with React Hooks.

``sh`
yarn add use-undo

`js
import React from 'react';
import ReactDOM from 'react-dom';
import useUndo from 'use-undo';
const App = () => {
const [
countState,
{
set: setCount,
reset: resetCount,
undo: undoCount,
redo: redoCount,
canUndo,
canRedo,
},
] = useUndo(0);
const { present: presentCount } = countState;
return (
You clicked {presentCount} times
Manual Checkpoints
Manual checkpoints are helpful also when you want manual control over checkpoints. For example it is more helpful when you want to handle input type html tag where value needs to be handled alongside the undo and redo functionality should be handled over some conditions.
`js
import React from 'react';
import ReactDOM from 'react-dom';
import useUndo from 'use-undo';const App = () => {
const [
countState,
{
set: setCount,
reset: resetCount,
undo: undoCount,
redo: redoCount,
canUndo,
canRedo,
},
] = useUndo(0, { useCheckpoints: true });
const { present: presentCount } = countState;
return (
You clicked {presentCount} times
);
};
`API
$3
`js
const [state, actions] = useUndo(initialState);
`#### state
##### Type:
Object| Key | Type | Description |
| ------- | :-----: | ------------------ |
| past |
Array | The undo stack. |
| present | Any | The present state. |
| future | Array | The redo stack. |#### actions
##### Type:
Object| Key | Type | Description |
| ------- | :--------: | ------------------------------------------------------------------------------------------ |
| set |
function | Assign a new value to present. |
| reset | function | Clear past array and future array. Assign a new value to present. |
| undo | function | See handling-undo. |
| redo | function | See handling-redo. |
| canUndo | boolean | Check whether state.undo.length is 0. |
| canRedo | boolean | Check whether state.redo.length is 0. |How does it work?
Refer to _Redux Implementing Undo History_,
use-undo implements the same concect with useReducer.
The state structure looks like:`js
{
past: Array,
present: ,
future: Array
}
`It stores all states we need. To operate on this state, there are three functions in
actions (set, undo and redo`) that dispatch defined types and necessary value.MIT © homerchen19