# Undo

Tracks variable history, to allow undo and redo

# Parameters

import { useUndo } from "vue-composable"; export interface UndoOptions<T> { /** * Watch `deep` option for changes */ deep: boolean; /** * Max history change * @default MAX_ARRAY_SIZE */ maxLength: number; /** * Clone strategy * @default (x)=>x */ clone: (entry: T) => T; } const defaultOptions = { deep: undefined, maxLength: MAX_ARRAY_SIZE, clone(x) { return x; } } useUndo(defaultValue?, options?); 
Parameters Type Required Default Description
defaultValue Ref<T>|T false undefined Default value
options (x: T)=>T false defaultOptions Configuration options

TIP

If tracking object please provide a options.clone function.

// example function clone(e) { return JSON.parse(JSON.stringify(e)); } 

# State

The useUndo function exposes the following reactive state:

import { useUndo } from "vue-composable"; const { value, prev, next } = useUndo(); 
State Type Description
value Ref<T> State value
prev Ref<T[]> Array of prev states
next Ref<T[]> Array of next states, only if you undo()

# Methods

The useUndo function exposes the following methods:

import { useUndo } from "vue-composable"; const { jump, undo, redo } = useUndo(); 
Signature Description
jump(delta) moves the cursor to delta, if delta is positive it will undo, if negative it will redo
undo(n?) Undo the state to n default to 1
redo(n?) Redo the state to n default to 1

# Example

Type a text to enable undo and redo

Prev []

Next []

# Code

<template> <div> <p>Type a text to enable undo and redo</p> <input v-model="value" /> <div> <button @click="undo()" :disabled="!prev.length">Undo</button> <button @click="redo()" :disabled="!next.length">Redo</button> </div> <p> <b>Prev</b> {{ prev }} </p> <p> <b>Next</b> {{ next }} </p> </div> </template> <script> import { useUndo } from "vue-composable"; export default { setup() { return useUndo(); } }; </script>