0.1.18 • Published 3 years ago

react-use-history-reducer v0.1.18

Weekly downloads
2
License
MIT
Repository
github
Last release
3 years ago

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.

Demo

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.

OptionTypeDefaultDescription
omitUnmodifiedbooleantrueIf 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
useCheckpointsbooleanfalseEnables checkpoints support. With this option you have to pass historyCheckpoint: true to the action to add state to history
maxnumberundefinedMax items length of history
initialHistoryStateHistoryReducerControlempty stateYou 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:

PropertyTypeDescription
undofunctionCall it to undo
redofunctionCall it to redo
canUndobooleanCheck if you can undo
canRedobooleanCheck if you can redo
paststate[]Past states
futurestate[]Future states
undoRedoCounternumberNumber 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

3 years ago

0.1.15

3 years ago

0.1.16

3 years ago

0.1.17

3 years ago

0.1.18

3 years ago

0.1.12

4 years ago

0.1.13

4 years ago

0.1.11

4 years ago

0.1.10

4 years ago

0.1.9

4 years ago

0.1.8

4 years ago

0.1.7

4 years ago

0.1.4

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago