Match-id-17719191991ce335a66dd99e1b57c5e119685a4b

This commit is contained in:
* 2023-06-07 17:25:20 +08:00
parent 914425a545
commit 75dabdb169
9 changed files with 42 additions and 2 deletions

View File

@ -69,6 +69,7 @@ import {
} from './src/dom/DOMExternal'; } from './src/dom/DOMExternal';
import { syncUpdates as flushSync } from './src/renderer/TreeBuilder'; import { syncUpdates as flushSync } from './src/renderer/TreeBuilder';
import { toRaw } from './src/horizonx/proxy/ProxyHandler';
const Horizon = { const Horizon = {
Children, Children,
@ -157,6 +158,7 @@ export {
clearStore, clearStore,
reduxAdapter, reduxAdapter,
watch, watch,
toRaw,
// 兼容ReactIs // 兼容ReactIs
isFragment, isFragment,
isElement, isElement,

View File

@ -13,4 +13,4 @@
* See the Mulan PSL v2 for more details. * See the Mulan PSL v2 for more details.
*/ */
export const OBSERVER_KEY = '_horizonObserver'; export const OBSERVER_KEY = typeof Symbol === 'function' ? Symbol('_horizonObserver') : '_horizonObserver';

View File

@ -52,8 +52,16 @@ export function createProxy(rawObj: any, listener: { current: (...args) => any }
let observer: IObserver = getObserver(rawObj); let observer: IObserver = getObserver(rawObj);
if (!observer) { if (!observer) {
observer = isHookObserver ? new Observer() : new HooklessObserver(); observer = isHookObserver ? new Observer() : new HooklessObserver();
if (typeof OBSERVER_KEY === 'string') {
Object.defineProperty(rawObj, OBSERVER_KEY, {
configurable: false,
enumerable: false,
value: observer,
});
} else {
rawObj[OBSERVER_KEY] = observer; rawObj[OBSERVER_KEY] = observer;
} }
}
hookObserverMap.set(rawObj, isHookObserver); hookObserverMap.set(rawObj, isHookObserver);
@ -96,3 +104,7 @@ export function createProxy(rawObj: any, listener: { current: (...args) => any }
return proxyObj; return proxyObj;
} }
export function toRaw<T>(observed: T): T {
return observed && (observed)['_rawValue'];
}

View File

@ -137,6 +137,10 @@ export function createArrayProxy(rawObj: any[], listener: { current: (...args) =
return objectGet(rawObj, key, receiver); return objectGet(rawObj, key, receiver);
} }
if (key === '_rawValue') {
return rawObj;
}
return Reflect.get(rawObj, key, receiver); return Reflect.get(rawObj, key, receiver);
} }

View File

@ -388,6 +388,10 @@ export function createMapProxy(
}; };
} }
if (key === '_rawValue') {
return rawObj;
}
return Reflect.get(rawObj, key, receiver); return Reflect.get(rawObj, key, receiver);
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -78,6 +78,10 @@ export function createObjectProxy<T extends object>(
}; };
} }
if (key === '_rawValue') {
return rawObj;
}
observer.useProp(key); observer.useProp(key);
const value = Reflect.get(rawObj, key, receiver); const value = Reflect.get(rawObj, key, receiver);

View File

@ -179,6 +179,11 @@ export function createSetProxy<T extends object>(
}; };
}; };
} }
if (key === '_rawValue') {
return rawObj;
}
return Reflect.get(rawObj, key, receiver); return Reflect.get(rawObj, key, receiver);
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -96,6 +96,10 @@ export function createWeakMapProxy(
}; };
} }
if (key === '_rawValue') {
return rawObj;
}
return Reflect.get(rawObj, key, receiver); return Reflect.get(rawObj, key, receiver);
} }

View File

@ -60,6 +60,11 @@ export function createWeakSetProxy<T extends object>(
}; };
}; };
} }
if (key === '_rawValue') {
return rawObj;
}
return Reflect.get(rawObj, key, receiver); return Reflect.get(rawObj, key, receiver);
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////