import XEUtils from "xe-utils"; type CodeType = keyof T & string | ((item: T) => string); export default function useList(opt: { value: T[]; key: CodeType; errMsg: ((item: T) => string) | string } | T[]) { let trackProxy = () => { } let triggerProxy = () => { } let list = [] if (XEUtils.isArray(opt)) { list = opt } if (XEUtils.isObject(opt)) { if (Array.isArray(opt.value)) { list = value } } const proxy = new Proxy(list, { get(target, key) { trackProxy() return target[key]; }, set(target: any[], p: string | symbol, newValue: any, receiver: any): boolean { target[p] = newValue; triggerProxy() return true; } }); return customRef((track, trigger) => { trackProxy = track; triggerProxy = XEUtils.debounce(trigger); return { get() { track() return proxy }, set(value) { proxy.length = 0; proxy.push(...value) trigger() } } }); }