mirror of
https://github.com/myfatemi04/wheelshare-frontend.git
synced 2025-04-16 00:50:18 -04:00
fix memory leak
This commit is contained in:
parent
e27f62701c
commit
dadb6e9bb3
|
@ -14,6 +14,9 @@ function createEdgeForObject<T extends PlainJSObject>(
|
||||||
value: T,
|
value: T,
|
||||||
setValue: Dispatch<SetStateAction<T>>
|
setValue: Dispatch<SetStateAction<T>>
|
||||||
): T {
|
): T {
|
||||||
|
// @ts-ignore
|
||||||
|
const edges: Record<keyof T, any> = {};
|
||||||
|
|
||||||
return new Proxy(value, {
|
return new Proxy(value, {
|
||||||
set: (target, property, value) => {
|
set: (target, property, value) => {
|
||||||
setValue((v) => ({ ...v, [property]: value }));
|
setValue((v) => ({ ...v, [property]: value }));
|
||||||
|
@ -22,13 +25,20 @@ function createEdgeForObject<T extends PlainJSObject>(
|
||||||
},
|
},
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
get: (target, property: keyof T) => {
|
get: (target, property: keyof T) => {
|
||||||
|
if (property in edges) {
|
||||||
|
// @ts-ignore
|
||||||
|
return edges[property];
|
||||||
|
}
|
||||||
|
|
||||||
const keyValue = target[property];
|
const keyValue = target[property];
|
||||||
const set = (next: SetStateAction<typeof keyValue>) => {
|
const set = (next: SetStateAction<typeof keyValue>) => {
|
||||||
const v = typeof next === 'function' ? next(keyValue) : next;
|
const v = typeof next === 'function' ? next(keyValue) : next;
|
||||||
setValue((value) => ({ ...value, [property]: v }));
|
setValue((value) => ({ ...value, [property]: v }));
|
||||||
};
|
};
|
||||||
|
|
||||||
return createEdge(keyValue, set);
|
const edge = createEdge(keyValue, set);
|
||||||
|
edges[property] = edge;
|
||||||
|
return edge;
|
||||||
},
|
},
|
||||||
deleteProperty: (target, property) => {
|
deleteProperty: (target, property) => {
|
||||||
setValue((v) => {
|
setValue((v) => {
|
||||||
|
@ -123,5 +133,7 @@ export default function useImmutable<T extends PlainJS>(
|
||||||
|
|
||||||
const edge = useMemo(() => createEdge(value, setValue), [value]);
|
const edge = useMemo(() => createEdge(value, setValue), [value]);
|
||||||
|
|
||||||
|
console.log('rerendered useImmutable');
|
||||||
|
|
||||||
return [edge, setValue];
|
return [edge, setValue];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user