12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import XEUtils from "xe-utils";
- type CodeType<T> = keyof T & string | ((item: T) => string);
- export default function useList<T = any>(opt: {
- value: T[];
- key: CodeType<T>;
- 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()
- }
- }
- });
- }
|