@legendapp/state 3.0.0-beta.30 → 3.0.0-beta.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.mts +5 -1
- package/index.d.ts +5 -1
- package/index.js +11 -2
- package/index.mjs +11 -2
- package/package.json +1 -1
- package/react.js +50 -40
- package/react.mjs +51 -41
package/index.d.mts
CHANGED
|
@@ -148,7 +148,7 @@ interface Change {
|
|
|
148
148
|
type RecordValue<T> = T extends Record<string, infer t> ? t : never;
|
|
149
149
|
type ArrayValue<T> = T extends Array<infer t> ? t : never;
|
|
150
150
|
type ObservableValue<T> = T extends Observable<infer t> ? t : never;
|
|
151
|
-
type Selector<T> = ObservableParam<T> | ObservableEvent | (() => T) | T;
|
|
151
|
+
type Selector<T> = ObservableParam<T> | ObservableEvent | (() => ObservableParam<T>) | (() => T) | T;
|
|
152
152
|
type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
|
|
153
153
|
type ObservableListenerDispose = () => void;
|
|
154
154
|
interface ObservableRoot {
|
|
@@ -304,6 +304,8 @@ declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Ob
|
|
|
304
304
|
declare function set(node: NodeInfo, newValue?: any): void;
|
|
305
305
|
declare function get(node: NodeInfo, options?: TrackingType | GetOptions): any;
|
|
306
306
|
declare function peek(node: NodeInfo): any;
|
|
307
|
+
declare function deactivateNode(node: NodeInfo): void;
|
|
308
|
+
declare function reactivateNode(node: NodeInfo, lazyFn: Function): void;
|
|
307
309
|
declare function isObserved(node: NodeInfo): boolean;
|
|
308
310
|
declare function shouldIgnoreUnobserved(node: NodeInfo, refreshFn: () => void): true | undefined;
|
|
309
311
|
|
|
@@ -411,6 +413,7 @@ declare function registerMiddleware(node: NodeInfo, type: MiddlewareEventType, h
|
|
|
411
413
|
declare const internal: {
|
|
412
414
|
createPreviousHandler: typeof createPreviousHandler;
|
|
413
415
|
clone: typeof clone;
|
|
416
|
+
deactivateNode: typeof deactivateNode;
|
|
414
417
|
deepMerge: typeof deepMerge;
|
|
415
418
|
ensureNodeValue: typeof ensureNodeValue;
|
|
416
419
|
findIDKey: typeof findIDKey;
|
|
@@ -442,6 +445,7 @@ declare const internal: {
|
|
|
442
445
|
observableFns: Map<string, (node: NodeInfo, ...args: any[]) => any>;
|
|
443
446
|
optimized: symbol;
|
|
444
447
|
peek: typeof peek;
|
|
448
|
+
reactivateNode: typeof reactivateNode;
|
|
445
449
|
registerMiddleware: typeof registerMiddleware;
|
|
446
450
|
safeParse: typeof safeParse;
|
|
447
451
|
safeStringify: typeof safeStringify;
|
package/index.d.ts
CHANGED
|
@@ -148,7 +148,7 @@ interface Change {
|
|
|
148
148
|
type RecordValue<T> = T extends Record<string, infer t> ? t : never;
|
|
149
149
|
type ArrayValue<T> = T extends Array<infer t> ? t : never;
|
|
150
150
|
type ObservableValue<T> = T extends Observable<infer t> ? t : never;
|
|
151
|
-
type Selector<T> = ObservableParam<T> | ObservableEvent | (() => T) | T;
|
|
151
|
+
type Selector<T> = ObservableParam<T> | ObservableEvent | (() => ObservableParam<T>) | (() => T) | T;
|
|
152
152
|
type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
|
|
153
153
|
type ObservableListenerDispose = () => void;
|
|
154
154
|
interface ObservableRoot {
|
|
@@ -304,6 +304,8 @@ declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Ob
|
|
|
304
304
|
declare function set(node: NodeInfo, newValue?: any): void;
|
|
305
305
|
declare function get(node: NodeInfo, options?: TrackingType | GetOptions): any;
|
|
306
306
|
declare function peek(node: NodeInfo): any;
|
|
307
|
+
declare function deactivateNode(node: NodeInfo): void;
|
|
308
|
+
declare function reactivateNode(node: NodeInfo, lazyFn: Function): void;
|
|
307
309
|
declare function isObserved(node: NodeInfo): boolean;
|
|
308
310
|
declare function shouldIgnoreUnobserved(node: NodeInfo, refreshFn: () => void): true | undefined;
|
|
309
311
|
|
|
@@ -411,6 +413,7 @@ declare function registerMiddleware(node: NodeInfo, type: MiddlewareEventType, h
|
|
|
411
413
|
declare const internal: {
|
|
412
414
|
createPreviousHandler: typeof createPreviousHandler;
|
|
413
415
|
clone: typeof clone;
|
|
416
|
+
deactivateNode: typeof deactivateNode;
|
|
414
417
|
deepMerge: typeof deepMerge;
|
|
415
418
|
ensureNodeValue: typeof ensureNodeValue;
|
|
416
419
|
findIDKey: typeof findIDKey;
|
|
@@ -442,6 +445,7 @@ declare const internal: {
|
|
|
442
445
|
observableFns: Map<string, (node: NodeInfo, ...args: any[]) => any>;
|
|
443
446
|
optimized: symbol;
|
|
444
447
|
peek: typeof peek;
|
|
448
|
+
reactivateNode: typeof reactivateNode;
|
|
445
449
|
registerMiddleware: typeof registerMiddleware;
|
|
446
450
|
safeParse: typeof safeParse;
|
|
447
451
|
safeStringify: typeof safeStringify;
|
package/index.js
CHANGED
|
@@ -2007,11 +2007,14 @@ function checkProperty(value, key) {
|
|
|
2007
2007
|
return value[key];
|
|
2008
2008
|
}
|
|
2009
2009
|
}
|
|
2010
|
-
function
|
|
2010
|
+
function deactivateNode(node) {
|
|
2011
2011
|
var _a, _b;
|
|
2012
2012
|
(_a = node.activatedObserveDispose) == null ? void 0 : _a.call(node);
|
|
2013
2013
|
(_b = node.linkedToNodeDispose) == null ? void 0 : _b.call(node);
|
|
2014
2014
|
node.activatedObserveDispose = node.linkedToNodeDispose = node.linkedToNode = void 0;
|
|
2015
|
+
}
|
|
2016
|
+
function reactivateNode(node, lazyFn) {
|
|
2017
|
+
deactivateNode(node);
|
|
2015
2018
|
node.lazyFn = lazyFn;
|
|
2016
2019
|
node.lazy = true;
|
|
2017
2020
|
}
|
|
@@ -2059,7 +2062,7 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
2059
2062
|
node.dirtyFn = refreshFn;
|
|
2060
2063
|
globalState.dirtyNodes.add(node);
|
|
2061
2064
|
}
|
|
2062
|
-
|
|
2065
|
+
const observeDispose = observe(
|
|
2063
2066
|
() => {
|
|
2064
2067
|
var _a, _b, _c, _d;
|
|
2065
2068
|
if (isFirst) {
|
|
@@ -2162,6 +2165,10 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
2162
2165
|
},
|
|
2163
2166
|
{ fromComputed: true }
|
|
2164
2167
|
);
|
|
2168
|
+
node.activatedObserveDispose = () => {
|
|
2169
|
+
observeDispose == null ? void 0 : observeDispose();
|
|
2170
|
+
disposes.forEach((fn) => fn());
|
|
2171
|
+
};
|
|
2165
2172
|
return activatedValue;
|
|
2166
2173
|
}
|
|
2167
2174
|
function activateNodeBase(node, value) {
|
|
@@ -2448,6 +2455,7 @@ function syncState(obs) {
|
|
|
2448
2455
|
var internal = {
|
|
2449
2456
|
createPreviousHandler,
|
|
2450
2457
|
clone,
|
|
2458
|
+
deactivateNode,
|
|
2451
2459
|
deepMerge,
|
|
2452
2460
|
ensureNodeValue,
|
|
2453
2461
|
findIDKey,
|
|
@@ -2465,6 +2473,7 @@ var internal = {
|
|
|
2465
2473
|
observableFns,
|
|
2466
2474
|
optimized,
|
|
2467
2475
|
peek,
|
|
2476
|
+
reactivateNode,
|
|
2468
2477
|
registerMiddleware,
|
|
2469
2478
|
safeParse,
|
|
2470
2479
|
safeStringify,
|
package/index.mjs
CHANGED
|
@@ -2005,11 +2005,14 @@ function checkProperty(value, key) {
|
|
|
2005
2005
|
return value[key];
|
|
2006
2006
|
}
|
|
2007
2007
|
}
|
|
2008
|
-
function
|
|
2008
|
+
function deactivateNode(node) {
|
|
2009
2009
|
var _a, _b;
|
|
2010
2010
|
(_a = node.activatedObserveDispose) == null ? void 0 : _a.call(node);
|
|
2011
2011
|
(_b = node.linkedToNodeDispose) == null ? void 0 : _b.call(node);
|
|
2012
2012
|
node.activatedObserveDispose = node.linkedToNodeDispose = node.linkedToNode = void 0;
|
|
2013
|
+
}
|
|
2014
|
+
function reactivateNode(node, lazyFn) {
|
|
2015
|
+
deactivateNode(node);
|
|
2013
2016
|
node.lazyFn = lazyFn;
|
|
2014
2017
|
node.lazy = true;
|
|
2015
2018
|
}
|
|
@@ -2057,7 +2060,7 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
2057
2060
|
node.dirtyFn = refreshFn;
|
|
2058
2061
|
globalState.dirtyNodes.add(node);
|
|
2059
2062
|
}
|
|
2060
|
-
|
|
2063
|
+
const observeDispose = observe(
|
|
2061
2064
|
() => {
|
|
2062
2065
|
var _a, _b, _c, _d;
|
|
2063
2066
|
if (isFirst) {
|
|
@@ -2160,6 +2163,10 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
2160
2163
|
},
|
|
2161
2164
|
{ fromComputed: true }
|
|
2162
2165
|
);
|
|
2166
|
+
node.activatedObserveDispose = () => {
|
|
2167
|
+
observeDispose == null ? void 0 : observeDispose();
|
|
2168
|
+
disposes.forEach((fn) => fn());
|
|
2169
|
+
};
|
|
2163
2170
|
return activatedValue;
|
|
2164
2171
|
}
|
|
2165
2172
|
function activateNodeBase(node, value) {
|
|
@@ -2446,6 +2453,7 @@ function syncState(obs) {
|
|
|
2446
2453
|
var internal = {
|
|
2447
2454
|
createPreviousHandler,
|
|
2448
2455
|
clone,
|
|
2456
|
+
deactivateNode,
|
|
2449
2457
|
deepMerge,
|
|
2450
2458
|
ensureNodeValue,
|
|
2451
2459
|
findIDKey,
|
|
@@ -2463,6 +2471,7 @@ var internal = {
|
|
|
2463
2471
|
observableFns,
|
|
2464
2472
|
optimized,
|
|
2465
2473
|
peek,
|
|
2474
|
+
reactivateNode,
|
|
2466
2475
|
registerMiddleware,
|
|
2467
2476
|
safeParse,
|
|
2468
2477
|
safeStringify,
|
package/package.json
CHANGED
package/react.js
CHANGED
|
@@ -411,38 +411,6 @@ function Switch({
|
|
|
411
411
|
const child = children[useSelector(value)];
|
|
412
412
|
return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
|
|
413
413
|
}
|
|
414
|
-
function useObservable(initialValue, deps) {
|
|
415
|
-
var _a;
|
|
416
|
-
const ref = React.useRef({});
|
|
417
|
-
ref.current.value = initialValue;
|
|
418
|
-
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
419
|
-
if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
|
|
420
|
-
const value = depsObs$ ? state.isFunction(initialValue) && initialValue.length === 1 ? (p) => {
|
|
421
|
-
depsObs$.get();
|
|
422
|
-
return ref.current.value(p);
|
|
423
|
-
} : () => {
|
|
424
|
-
depsObs$.get();
|
|
425
|
-
return state.computeSelector(ref.current.value);
|
|
426
|
-
} : initialValue;
|
|
427
|
-
ref.current.obs$ = state.observable(value);
|
|
428
|
-
}
|
|
429
|
-
if (depsObs$) {
|
|
430
|
-
depsObs$.set(deps);
|
|
431
|
-
}
|
|
432
|
-
return ref.current.obs$;
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
// src/react/useComputed.ts
|
|
436
|
-
function useComputed(get, set, deps) {
|
|
437
|
-
if (!deps && state.isArray(set)) {
|
|
438
|
-
deps = set;
|
|
439
|
-
set = void 0;
|
|
440
|
-
}
|
|
441
|
-
return useObservable(
|
|
442
|
-
set ? state.linked({ get, set: ({ value }) => set(value) }) : get,
|
|
443
|
-
deps
|
|
444
|
-
);
|
|
445
|
-
}
|
|
446
414
|
var useEffectOnce = (effect, deps) => {
|
|
447
415
|
if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
|
|
448
416
|
const refDispose = React.useRef({ num: 0 });
|
|
@@ -471,6 +439,8 @@ var useEffectOnce = (effect, deps) => {
|
|
|
471
439
|
React.useEffect(effect, deps);
|
|
472
440
|
}
|
|
473
441
|
};
|
|
442
|
+
|
|
443
|
+
// src/react/useMount.ts
|
|
474
444
|
function useMount(fn) {
|
|
475
445
|
return useEffectOnce(() => {
|
|
476
446
|
const ret = fn();
|
|
@@ -481,6 +451,54 @@ function useMount(fn) {
|
|
|
481
451
|
}
|
|
482
452
|
var useMountOnce = useMount;
|
|
483
453
|
|
|
454
|
+
// src/react/useUnmount.ts
|
|
455
|
+
function useUnmount(fn) {
|
|
456
|
+
return useMount(() => fn);
|
|
457
|
+
}
|
|
458
|
+
var useUnmountOnce = useUnmount;
|
|
459
|
+
|
|
460
|
+
// src/react/useObservable.ts
|
|
461
|
+
var { deactivateNode } = state.internal;
|
|
462
|
+
function useObservable(initialValue, deps) {
|
|
463
|
+
var _a;
|
|
464
|
+
const ref = React.useRef({});
|
|
465
|
+
ref.current.value = initialValue;
|
|
466
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
467
|
+
if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
|
|
468
|
+
const value = depsObs$ ? state.isFunction(initialValue) && initialValue.length === 1 ? (p) => {
|
|
469
|
+
depsObs$.get();
|
|
470
|
+
return ref.current.value(p);
|
|
471
|
+
} : () => {
|
|
472
|
+
depsObs$.get();
|
|
473
|
+
return state.computeSelector(ref.current.value);
|
|
474
|
+
} : initialValue;
|
|
475
|
+
ref.current.obs$ = state.observable(value);
|
|
476
|
+
}
|
|
477
|
+
if (depsObs$) {
|
|
478
|
+
depsObs$.set(deps);
|
|
479
|
+
}
|
|
480
|
+
useUnmount(() => {
|
|
481
|
+
const obs = ref.current.obs$;
|
|
482
|
+
if (obs) {
|
|
483
|
+
const node = state.getNode(obs);
|
|
484
|
+
deactivateNode(node);
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
return ref.current.obs$;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
// src/react/useComputed.ts
|
|
491
|
+
function useComputed(get, set, deps) {
|
|
492
|
+
if (!deps && state.isArray(set)) {
|
|
493
|
+
deps = set;
|
|
494
|
+
set = void 0;
|
|
495
|
+
}
|
|
496
|
+
return useObservable(
|
|
497
|
+
set ? state.linked({ get, set: ({ value }) => set(value) }) : get,
|
|
498
|
+
deps
|
|
499
|
+
);
|
|
500
|
+
}
|
|
501
|
+
|
|
484
502
|
// src/react/useIsMounted.ts
|
|
485
503
|
function useIsMounted() {
|
|
486
504
|
const obs = useObservable(false);
|
|
@@ -500,14 +518,6 @@ function useObservableReducer(reducer, initializerArg, initializer) {
|
|
|
500
518
|
};
|
|
501
519
|
return [obs, dispatch];
|
|
502
520
|
}
|
|
503
|
-
|
|
504
|
-
// src/react/useUnmount.ts
|
|
505
|
-
function useUnmount(fn) {
|
|
506
|
-
return useMount(() => fn);
|
|
507
|
-
}
|
|
508
|
-
var useUnmountOnce = useUnmount;
|
|
509
|
-
|
|
510
|
-
// src/react/useObserve.ts
|
|
511
521
|
function useObserve(selector, reactionOrOptions, options) {
|
|
512
522
|
let reaction;
|
|
513
523
|
if (state.isFunction(reactionOrOptions)) {
|
package/react.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isFunction, isEmpty, observable, computeSelector, isArray, isMap, isObservableValueReady,
|
|
1
|
+
import { isFunction, isEmpty, observable, computeSelector, isArray, isMap, isObservableValueReady, isPromise, getNode as getNode$1, linked, observe, when, whenReady, internal, trackSelector, isPrimitive, isObservable } from '@legendapp/state';
|
|
2
2
|
import React, { memo, forwardRef, createElement, useState, useContext, useMemo, useRef, useEffect, createContext, useCallback } from 'react';
|
|
3
3
|
import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';
|
|
4
4
|
import { enableReactive } from '@legendapp/state/react-reactive/enableReactive';
|
|
@@ -405,38 +405,6 @@ function Switch({
|
|
|
405
405
|
const child = children[useSelector(value)];
|
|
406
406
|
return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
|
|
407
407
|
}
|
|
408
|
-
function useObservable(initialValue, deps) {
|
|
409
|
-
var _a;
|
|
410
|
-
const ref = useRef({});
|
|
411
|
-
ref.current.value = initialValue;
|
|
412
|
-
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
413
|
-
if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
|
|
414
|
-
const value = depsObs$ ? isFunction(initialValue) && initialValue.length === 1 ? (p) => {
|
|
415
|
-
depsObs$.get();
|
|
416
|
-
return ref.current.value(p);
|
|
417
|
-
} : () => {
|
|
418
|
-
depsObs$.get();
|
|
419
|
-
return computeSelector(ref.current.value);
|
|
420
|
-
} : initialValue;
|
|
421
|
-
ref.current.obs$ = observable(value);
|
|
422
|
-
}
|
|
423
|
-
if (depsObs$) {
|
|
424
|
-
depsObs$.set(deps);
|
|
425
|
-
}
|
|
426
|
-
return ref.current.obs$;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// src/react/useComputed.ts
|
|
430
|
-
function useComputed(get, set, deps) {
|
|
431
|
-
if (!deps && isArray(set)) {
|
|
432
|
-
deps = set;
|
|
433
|
-
set = void 0;
|
|
434
|
-
}
|
|
435
|
-
return useObservable(
|
|
436
|
-
set ? linked({ get, set: ({ value }) => set(value) }) : get,
|
|
437
|
-
deps
|
|
438
|
-
);
|
|
439
|
-
}
|
|
440
408
|
var useEffectOnce = (effect, deps) => {
|
|
441
409
|
if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
|
|
442
410
|
const refDispose = useRef({ num: 0 });
|
|
@@ -465,6 +433,8 @@ var useEffectOnce = (effect, deps) => {
|
|
|
465
433
|
useEffect(effect, deps);
|
|
466
434
|
}
|
|
467
435
|
};
|
|
436
|
+
|
|
437
|
+
// src/react/useMount.ts
|
|
468
438
|
function useMount(fn) {
|
|
469
439
|
return useEffectOnce(() => {
|
|
470
440
|
const ret = fn();
|
|
@@ -475,6 +445,54 @@ function useMount(fn) {
|
|
|
475
445
|
}
|
|
476
446
|
var useMountOnce = useMount;
|
|
477
447
|
|
|
448
|
+
// src/react/useUnmount.ts
|
|
449
|
+
function useUnmount(fn) {
|
|
450
|
+
return useMount(() => fn);
|
|
451
|
+
}
|
|
452
|
+
var useUnmountOnce = useUnmount;
|
|
453
|
+
|
|
454
|
+
// src/react/useObservable.ts
|
|
455
|
+
var { deactivateNode } = internal;
|
|
456
|
+
function useObservable(initialValue, deps) {
|
|
457
|
+
var _a;
|
|
458
|
+
const ref = useRef({});
|
|
459
|
+
ref.current.value = initialValue;
|
|
460
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
461
|
+
if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
|
|
462
|
+
const value = depsObs$ ? isFunction(initialValue) && initialValue.length === 1 ? (p) => {
|
|
463
|
+
depsObs$.get();
|
|
464
|
+
return ref.current.value(p);
|
|
465
|
+
} : () => {
|
|
466
|
+
depsObs$.get();
|
|
467
|
+
return computeSelector(ref.current.value);
|
|
468
|
+
} : initialValue;
|
|
469
|
+
ref.current.obs$ = observable(value);
|
|
470
|
+
}
|
|
471
|
+
if (depsObs$) {
|
|
472
|
+
depsObs$.set(deps);
|
|
473
|
+
}
|
|
474
|
+
useUnmount(() => {
|
|
475
|
+
const obs = ref.current.obs$;
|
|
476
|
+
if (obs) {
|
|
477
|
+
const node = getNode$1(obs);
|
|
478
|
+
deactivateNode(node);
|
|
479
|
+
}
|
|
480
|
+
});
|
|
481
|
+
return ref.current.obs$;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// src/react/useComputed.ts
|
|
485
|
+
function useComputed(get, set, deps) {
|
|
486
|
+
if (!deps && isArray(set)) {
|
|
487
|
+
deps = set;
|
|
488
|
+
set = void 0;
|
|
489
|
+
}
|
|
490
|
+
return useObservable(
|
|
491
|
+
set ? linked({ get, set: ({ value }) => set(value) }) : get,
|
|
492
|
+
deps
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
|
|
478
496
|
// src/react/useIsMounted.ts
|
|
479
497
|
function useIsMounted() {
|
|
480
498
|
const obs = useObservable(false);
|
|
@@ -494,14 +512,6 @@ function useObservableReducer(reducer, initializerArg, initializer) {
|
|
|
494
512
|
};
|
|
495
513
|
return [obs, dispatch];
|
|
496
514
|
}
|
|
497
|
-
|
|
498
|
-
// src/react/useUnmount.ts
|
|
499
|
-
function useUnmount(fn) {
|
|
500
|
-
return useMount(() => fn);
|
|
501
|
-
}
|
|
502
|
-
var useUnmountOnce = useUnmount;
|
|
503
|
-
|
|
504
|
-
// src/react/useObserve.ts
|
|
505
515
|
function useObserve(selector, reactionOrOptions, options) {
|
|
506
516
|
let reaction;
|
|
507
517
|
if (isFunction(reactionOrOptions)) {
|