vueuse 中文文档

Vueuse useManualRefHistory 手动提交修改记录

Vueuse useManualRefHistoryuseRefHistory不同需要手动调用commit()保存当前记录,手动跟踪ref的更改历史,还提供撤消和重做功能。

代码示例

import { ref } from 'vue';
import { useManualRefHistory } from '@vueuse/core';
 
const times= ref(100);
//绑定ref对象
const { history, commit, undo, redo,clear,canUndo, canRedo} = useManualRefHistory(times);
//或设置最多记录10数据
const { history, commit, undo, redo,clear,canUndo, canRedo } = useManualRefHistory(times,{capacity:10});
//修改它的值
times.value += 1;
//记录这次修改
commit();
//记录的内容
console.log(history.value);
/* [
  { snapshot: 1, timestamp: 1688283665997},
  { snapshot: 0, timestamp: 1688283663309}
] */
//撤销修改
undo();
//重置
redo();
//清除所有记录
clear();

记录引用对象

// 需要记录的ref对象
const userInfo = ref({num:100,name:'文一路'});
// clone 是否深拷贝,如果false ,记录的数据都是一样的,感觉没有啥意义 
const { history  } = useManualRefHistory(userInfo,
{
   clone: false
 })

clone:true 例子

例子

clone:false 例子

例子

自定义clone函数

使用 js原生的 structuredClone进行深拷贝:

import { useManualRefHistory } from '@vueuse/core'

const refHistory = useManualRefHistory(target, { clone: structuredClone })

或者使用 lodash的cloneDeep函数进行深拷贝:

import { cloneDeep } from 'lodash-es'
import { useManualRefHistory } from '@vueuse/core'

const refHistory = useManualRefHistory(target, { clone: cloneDeep })

或者lightweight klona:

import { klona } from 'klona'
import { useManualRefHistory } from '@vueuse/core'

const refHistory = useManualRefHistory(target, { clone: klona })

自定义Dump and Parse

如果不使用clone参数,您可以传递自定义函数来控制序列化和解析函数

import { useManualRefHistory } from '@vueuse/core'

const refHistory = useManualRefHistory(target, {
  dump: JSON.stringify,
  parse: JSON.parse,
})
Catalog
vueuse 入门 State 状态 createGlobalState 全局状态 createInjectionState 组件传值 createSharedComposable useAsyncState 异步响应式 useDebouncedRefHistory useLastChanged 最后修改时间 useLocalStorage 响应式存储 useManualRefHistory useRefHistory 历史快照 useStorageAsync useSessionStorage 响应式存储 useStorage 响应式存储 useThrottledRefHistory Elements 元素 Browser 浏览器 Sensors 感应监测