import { useMemo, useState } from "react"
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const useProxy = <T extends Record<string | symbol, any>>(state: T): T => {
const [value, setValue] = useState<T | undefined>()
const createProxy = (target: T): T => {
return new Proxy(target, {
get: Reflect.get,
set: (target, key: keyof T, value, reciver) => {
target[key] = value
setValue(createProxy(target))
return Reflect.set(target, key, value, reciver)
}
})
}
// eslint-disable-next-line react-hooks/exhaustive-deps
const initVlaue = useMemo(() => createProxy(state), [state])
return value ?? initVlaue
}
react 自动更新状态
最新推荐文章于 2024-05-20 18:29:30 发布