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-reducer
For 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 storybook
0.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