JSPM

  • Created
  • Published
  • Downloads 16
  • Score
    100M100P100Q58396F
  • License MIT

Drop in replacement for useState hook but with undo functionality.

Package Exports

  • @rooks/use-undo-state

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@rooks/use-undo-state) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@rooks/use-undo-state

TitleCard

Build Status

About

Drop in replacement for useState hook but with undo functionality.

Installation

npm install --save @rooks/use-undo-state

Importing the hook

import useUndoState from '@rooks/use-undo-state'

Usage

const Demo = () => {
  const [value, setValue, undo] = useUndoState(0)

  return (
    <div>
      <span>Current value: {value}</span>
      <button onClick={() => setValue(value + 1)}>
        Increment
      </button>
      <button onClick={undo}>
        Undo
      </button>
    </div>
  )
}

render(<Demo/>)

You can pass any kind of value to hook just like React's own useState.

const Demo = () => {
  const [value, setValue, undo] = useUndoState({ data: 42 })

  return (
    <div>
      <span>Current value: {value}</span>
      <button onClick={() => setValue({ data: value.data + 1 })}>
        Increment object data
      </button>
      <button onClick={undo}>
        Undo
      </button>
    </div>
  )
}

render(<Demo/>)

Setter function can also be used with callback just like React's own useState.

const [value, setValue, undo] = useUndoState({ data: 42 })

() => setValue(current => current + 1)
const Demo = () => {
  const [value, setValue, undo] = useUndoState(0)

  return (
    <div>
      <span>Current value: {value}</span>
      <button onClick={() => setValue(current => current + 1)}>
        Increment
      </button>
      <button onClick={undo}>
        Undo
      </button>
    </div>
  )
}

render(<Demo/>)

To preserve memory you can limit number of steps that will be preserved in undo history.

const [value, setValue, undo] = useUndoState(0, { maxSize: 30 })

// now when calling undo only last 30 changes to the value will be preserved

Arguments

Arguments Type Description Default value
initialValue boolean Initial value of the state false
Options Object An options object for the hook {maxSize: 100}

Note: The second argument is an options object which currently accepts a maxSize which governs the maximum number of previous states to keep track of.

Returned array items

Returned Array items Type Description
value Any Current value
setValue function Setter function to update value
undo function Undo state value