0.1.18 • Published 4 years ago
react-use-history-reducer v0.1.18
useHistoryReducer react hook
It's a hook that adds undo and redo functionality to the useReducer.
There is already a few such libraries, but this one is easiest to use. You don't need to modify your existing reducer to use this lib.
Installation
yarn add react-use-history-reducerFor example, you want to add the history capability to this component:
import React, { useReducer } from 'react'
export const MyComponent = () => {
const [state, dispatch] = useReducer(reducer, initialState)
return (
<div>
...
</div>
)
}This is all you need to do:
import React from 'react'
import useHistoryReducer from 'react-use-history-reducer'
export const MyComponent = () => {
const [state, dispatch, history] = useHistoryReducer(reducer, initialState)
return (
<div>
<button disabled={!history.canUndo} onClick={history.undo}>
Undo
</button>
<button disabled={!history.canRedo} onClick={history.redo}>
Redo
</button>
...
</div>
)
}Options
You can pass options in a third argument
const [state, dispatch, history, currentHistoryState] = useHistoryReducer(
reducer,
initialState,
{
omitUnmodified: true,
useCheckpoints: false,
max: 5,
initialHistoryState: initialHistoryState,
}
)You can save the currentHistoryState on component unmount and use it later as
the initialHistoryState option.
| Option | Type | Default | Description |
|---|---|---|---|
| omitUnmodified | boolean | true | If it's true, it doesn't push a new state to the history, if it's the same as a previous one. It compares states using the JSON.stringify |
| useCheckpoints | boolean | false | Enables checkpoints support. With this option you have to pass historyCheckpoint: true to the action to add state to history |
| max | number | undefined | Max items length of history |
| initialHistoryState | HistoryReducerControl | empty state | You can pass here your own initial history state. The current state is available in forth argument returned by useHistoryReducer. It's useful on re-mounting component with useHistoryReducer |
The history object
history is a third element in list returned by useHistoryReducer.
const [state, dispatch, history] = useHistoryReducer(reducer, initialState)It has these properties:
| Property | Type | Description |
|---|---|---|
| undo | function | Call it to undo |
| redo | function | Call it to redo |
| canUndo | boolean | Check if you can undo |
| canRedo | boolean | Check if you can redo |
| past | state[] | Past states |
| future | state[] | Future states |
| undoRedoCounter | number | Number of undo and redo actions. Can be used if we want to reload some component on undo/redo click |
Development
yarn run storybook0.1.14
4 years ago
0.1.15
4 years ago
0.1.16
4 years ago
0.1.17
4 years ago
0.1.18
4 years ago
0.1.12
5 years ago
0.1.13
5 years ago
0.1.11
5 years ago
0.1.10
5 years ago
0.1.9
5 years ago
0.1.8
5 years ago
0.1.7
5 years ago
0.1.4
5 years ago
0.1.6
5 years ago
0.1.5
5 years ago
0.1.3
5 years ago
0.1.2
5 years ago
0.1.1
5 years ago
0.1.0
5 years ago