@viewfly/core 1.1.2 → 1.1.7
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/bundles/index.d.ts +97 -94
- package/bundles/index.esm.js +198 -192
- package/bundles/index.js +198 -192
- package/package.json +2 -2
package/bundles/index.d.ts
CHANGED
|
@@ -195,10 +195,6 @@ interface Props {
|
|
|
195
195
|
children?: JSXNode | JSXNode[];
|
|
196
196
|
}
|
|
197
197
|
declare function Fragment(props: Props): () => JSXNode | JSXNode[];
|
|
198
|
-
interface ContextProps extends Props {
|
|
199
|
-
providers: Provider[];
|
|
200
|
-
}
|
|
201
|
-
declare function Context(props: ContextProps): () => ViewFlyNode<string | ComponentSetup<any>>;
|
|
202
198
|
type Key = number | string;
|
|
203
199
|
declare function jsx(type: string | ComponentSetup, props: Props & Record<string, any>, key?: Key): ViewFlyNode;
|
|
204
200
|
declare const jsxs: typeof jsx;
|
|
@@ -275,6 +271,49 @@ declare abstract class NativeRenderer<ElementNode = NativeNode, TextNode = Nativ
|
|
|
275
271
|
abstract insertAfter(newNode: ElementNode | TextNode, ref: ElementNode | TextNode, namespace: ElementNamespace): void;
|
|
276
272
|
}
|
|
277
273
|
|
|
274
|
+
interface RefListener<T> {
|
|
275
|
+
(current: T): void | (() => void);
|
|
276
|
+
}
|
|
277
|
+
type ExtractInstanceType<T, U = T extends (...args: any) => any ? ReturnType<T> : T> = U extends ComponentInstance<any> ? Omit<U, keyof ComponentInstance<any>> : U extends Function ? never : T;
|
|
278
|
+
interface AbstractInstanceType<T extends Record<string, any>> {
|
|
279
|
+
(): T & ComponentInstance<any>;
|
|
280
|
+
}
|
|
281
|
+
declare class DynamicRef<T> {
|
|
282
|
+
private callback;
|
|
283
|
+
private unBindMap;
|
|
284
|
+
private targetCaches;
|
|
285
|
+
constructor(callback: RefListener<T>);
|
|
286
|
+
bind(value: T): void;
|
|
287
|
+
unBind(value: T): void;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* 用于节点渲染完成时获取 DOM 节点
|
|
291
|
+
* @param callback 获取 DOM 节点的回调函数
|
|
292
|
+
* @example
|
|
293
|
+
* ```tsx
|
|
294
|
+
* function App() {
|
|
295
|
+
* const ref = createDynamicRef(node => {
|
|
296
|
+
* function fn() {
|
|
297
|
+
* // do something...
|
|
298
|
+
* }
|
|
299
|
+
* node.addEventListener('click', fn)
|
|
300
|
+
* return () => {
|
|
301
|
+
* node.removeEventListener('click', fn)
|
|
302
|
+
* }
|
|
303
|
+
* })
|
|
304
|
+
* return () => {
|
|
305
|
+
* return <div ref={ref}>xxx</div>
|
|
306
|
+
* }
|
|
307
|
+
* }
|
|
308
|
+
* ```
|
|
309
|
+
*/
|
|
310
|
+
declare function createDynamicRef<T, U = ExtractInstanceType<T>>(callback: RefListener<U>): DynamicRef<U>;
|
|
311
|
+
declare class StaticRef<T> extends DynamicRef<T> {
|
|
312
|
+
readonly current: T | null;
|
|
313
|
+
constructor();
|
|
314
|
+
}
|
|
315
|
+
declare function createRef<T, U = ExtractInstanceType<T>>(): StaticRef<U>;
|
|
316
|
+
|
|
278
317
|
declare namespace JSX {
|
|
279
318
|
type ElementType = keyof IntrinsicElements | ComponentSetup;
|
|
280
319
|
interface Element extends ViewFlyNode {
|
|
@@ -305,63 +344,9 @@ declare namespace JSX {
|
|
|
305
344
|
}
|
|
306
345
|
}
|
|
307
346
|
|
|
308
|
-
declare function getSetupContext(need?: boolean): Component;
|
|
309
|
-
type ClassNames = string | Record<string, unknown> | false | null | undefined | ClassNames[];
|
|
310
|
-
interface ComponentInstance<P> {
|
|
311
|
-
$portalHost?: NativeNode;
|
|
312
|
-
$render(): JSXNode;
|
|
313
|
-
$useMemo?(currentProps: P, prevProps: P): boolean;
|
|
314
|
-
}
|
|
315
|
-
type JSXNode = JSX.Element | JSX.ElementClass | string | number | boolean | null | undefined | Iterable<JSXNode>;
|
|
316
|
-
interface ComponentAnnotation {
|
|
317
|
-
scope?: Scope;
|
|
318
|
-
providers?: Provider[];
|
|
319
|
-
}
|
|
320
|
-
interface ComponentSetup<P = any> {
|
|
321
|
-
(props: P): (() => JSXNode) | ComponentInstance<P>;
|
|
322
|
-
annotation?: ComponentAnnotation;
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Viewfly 组件管理类,用于管理组件的生命周期,上下文等
|
|
326
|
-
*/
|
|
327
|
-
declare class Component extends ReflectiveInjector {
|
|
328
|
-
private readonly parentComponent;
|
|
329
|
-
readonly type: ComponentSetup;
|
|
330
|
-
props: Props;
|
|
331
|
-
readonly key?: Key | undefined;
|
|
332
|
-
instance: ComponentInstance<Props>;
|
|
333
|
-
changedSubComponents: Set<Component>;
|
|
334
|
-
get dirty(): boolean;
|
|
335
|
-
get changed(): boolean;
|
|
336
|
-
unmountedCallbacks?: LifeCycleCallback[] | null;
|
|
337
|
-
mountCallbacks?: LifeCycleCallback[] | null;
|
|
338
|
-
propsChangedCallbacks?: PropsChangedCallback<any>[] | null;
|
|
339
|
-
updatedCallbacks?: LifeCycleCallback[] | null;
|
|
340
|
-
private updatedDestroyCallbacks?;
|
|
341
|
-
private propsChangedDestroyCallbacks?;
|
|
342
|
-
protected _dirty: boolean;
|
|
343
|
-
protected _changed: boolean;
|
|
344
|
-
private isFirstRendering;
|
|
345
|
-
private refs;
|
|
346
|
-
private listener;
|
|
347
|
-
constructor(parentComponent: Injector | null, type: ComponentSetup, props: Props, key?: Key | undefined);
|
|
348
|
-
markAsDirtied(): void;
|
|
349
|
-
markAsChanged(changedComponent?: Component): void;
|
|
350
|
-
render(update: (template: JSXNode, portalHost?: NativeNode) => void): void;
|
|
351
|
-
update(newProps: Record<string, any>, updateChildren: (jsxNode: JSXNode) => void, reuseChildren: (skipSubComponentDiff: boolean) => void): void;
|
|
352
|
-
provide<T>(providers: Provider<T> | Provider<T>[]): void;
|
|
353
|
-
destroy(): void;
|
|
354
|
-
rendered(): void;
|
|
355
|
-
private invokePropsChangedHooks;
|
|
356
|
-
private invokeMountHooks;
|
|
357
|
-
private invokeUpdatedHooks;
|
|
358
|
-
}
|
|
359
347
|
interface LifeCycleCallback {
|
|
360
348
|
(): void | (() => void);
|
|
361
349
|
}
|
|
362
|
-
interface PropsChangedCallback<T extends Props> {
|
|
363
|
-
(currentProps: T, oldProps: T): void | (() => void);
|
|
364
|
-
}
|
|
365
350
|
/**
|
|
366
351
|
* 当组件第一次渲染完成时触发
|
|
367
352
|
* @param callback
|
|
@@ -391,6 +376,9 @@ declare function onMounted(callback: LifeCycleCallback): void;
|
|
|
391
376
|
* ```
|
|
392
377
|
*/
|
|
393
378
|
declare function onUpdated(callback: LifeCycleCallback): () => void;
|
|
379
|
+
interface PropsChangedCallback<T extends Props> {
|
|
380
|
+
(currentProps: T, oldProps: T): void | (() => void);
|
|
381
|
+
}
|
|
394
382
|
/**
|
|
395
383
|
* 当组件 props 更新地调用
|
|
396
384
|
* @param callback
|
|
@@ -416,48 +404,58 @@ declare function onPropsChanged<T extends Props>(callback: PropsChangedCallback<
|
|
|
416
404
|
* @param callback
|
|
417
405
|
*/
|
|
418
406
|
declare function onUnmounted(callback: () => void): void;
|
|
419
|
-
|
|
420
|
-
|
|
407
|
+
|
|
408
|
+
declare function getSetupContext(need?: boolean): Component;
|
|
409
|
+
type ClassNames = string | Record<string, unknown> | false | null | undefined | ClassNames[];
|
|
410
|
+
interface ComponentInstance<P> {
|
|
411
|
+
$portalHost?: NativeNode;
|
|
412
|
+
$render(): JSXNode;
|
|
413
|
+
$useMemo?(currentProps: P, prevProps: P): boolean;
|
|
421
414
|
}
|
|
422
|
-
type
|
|
423
|
-
interface
|
|
424
|
-
|
|
415
|
+
type JSXNode = JSX.Element | JSX.ElementClass | string | number | boolean | null | undefined | Iterable<JSXNode>;
|
|
416
|
+
interface ComponentAnnotation {
|
|
417
|
+
scope?: Scope;
|
|
418
|
+
providers?: Provider[];
|
|
425
419
|
}
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
private targetCaches;
|
|
430
|
-
constructor(callback: RefListener<T>);
|
|
431
|
-
bind(value: T): void;
|
|
432
|
-
unBind(value: T): void;
|
|
420
|
+
interface ComponentSetup<P = any> {
|
|
421
|
+
(props: P): (() => JSXNode) | ComponentInstance<P>;
|
|
422
|
+
annotation?: ComponentAnnotation;
|
|
433
423
|
}
|
|
434
424
|
/**
|
|
435
|
-
*
|
|
436
|
-
* @param callback 获取 DOM 节点的回调函数
|
|
437
|
-
* @example
|
|
438
|
-
* ```tsx
|
|
439
|
-
* function App() {
|
|
440
|
-
* const ref = createDynamicRef(node => {
|
|
441
|
-
* function fn() {
|
|
442
|
-
* // do something...
|
|
443
|
-
* }
|
|
444
|
-
* node.addEventListener('click', fn)
|
|
445
|
-
* return () => {
|
|
446
|
-
* node.removeEventListener('click', fn)
|
|
447
|
-
* }
|
|
448
|
-
* })
|
|
449
|
-
* return () => {
|
|
450
|
-
* return <div ref={ref}>xxx</div>
|
|
451
|
-
* }
|
|
452
|
-
* }
|
|
453
|
-
* ```
|
|
425
|
+
* Viewfly 组件管理类,用于管理组件的生命周期,上下文等
|
|
454
426
|
*/
|
|
455
|
-
declare
|
|
456
|
-
|
|
457
|
-
readonly
|
|
458
|
-
|
|
427
|
+
declare class Component extends ReflectiveInjector {
|
|
428
|
+
private readonly parentComponent;
|
|
429
|
+
readonly type: ComponentSetup;
|
|
430
|
+
props: Props;
|
|
431
|
+
readonly key?: Key | undefined;
|
|
432
|
+
instance: ComponentInstance<Props>;
|
|
433
|
+
changedSubComponents: Set<Component>;
|
|
434
|
+
get dirty(): boolean;
|
|
435
|
+
get changed(): boolean;
|
|
436
|
+
unmountedCallbacks?: LifeCycleCallback[] | null;
|
|
437
|
+
mountCallbacks?: LifeCycleCallback[] | null;
|
|
438
|
+
propsChangedCallbacks?: PropsChangedCallback<any>[] | null;
|
|
439
|
+
updatedCallbacks?: LifeCycleCallback[] | null;
|
|
440
|
+
private updatedDestroyCallbacks?;
|
|
441
|
+
private propsChangedDestroyCallbacks?;
|
|
442
|
+
protected _dirty: boolean;
|
|
443
|
+
protected _changed: boolean;
|
|
444
|
+
private isFirstRendering;
|
|
445
|
+
private refs;
|
|
446
|
+
private listener;
|
|
447
|
+
constructor(parentComponent: Injector | null, type: ComponentSetup, props: Props, key?: Key | undefined);
|
|
448
|
+
markAsDirtied(): void;
|
|
449
|
+
markAsChanged(changedComponent?: Component): void;
|
|
450
|
+
render(update: (template: JSXNode, portalHost?: NativeNode) => void): void;
|
|
451
|
+
update(newProps: Record<string, any>, updateChildren: (jsxNode: JSXNode) => void, reuseChildren: (skipSubComponentDiff: boolean) => void): void;
|
|
452
|
+
provide<T>(providers: Provider<T> | Provider<T>[]): void;
|
|
453
|
+
destroy(): void;
|
|
454
|
+
rendered(): void;
|
|
455
|
+
private invokePropsChangedHooks;
|
|
456
|
+
private invokeMountHooks;
|
|
457
|
+
private invokeUpdatedHooks;
|
|
459
458
|
}
|
|
460
|
-
declare function createRef<T, U = ExtractInstanceType<T>>(): StaticRef<U>;
|
|
461
459
|
/**
|
|
462
460
|
* 给组件添加注解
|
|
463
461
|
* @param annotation
|
|
@@ -487,6 +485,11 @@ declare function inject<T extends Type<any> | AbstractType<any> | InjectionToken
|
|
|
487
485
|
*/
|
|
488
486
|
declare function getCurrentInstance(): Component;
|
|
489
487
|
|
|
488
|
+
interface ContextProps extends Props {
|
|
489
|
+
providers: Provider[];
|
|
490
|
+
}
|
|
491
|
+
declare function Context(props: ContextProps): () => ViewFlyNode<string | ComponentSetup<any>>;
|
|
492
|
+
|
|
490
493
|
declare function withMemo<T extends Props = Props>(canUseMemo: ComponentInstance<T>['$useMemo'], render: () => JSXNode): ComponentInstance<T>;
|
|
491
494
|
|
|
492
495
|
declare const ElementNamespaceMap: Record<string, string>;
|
package/bundles/index.esm.js
CHANGED
|
@@ -639,6 +639,174 @@ function popListener() {
|
|
|
639
639
|
listeners.pop();
|
|
640
640
|
}
|
|
641
641
|
|
|
642
|
+
/**
|
|
643
|
+
* 当组件第一次渲染完成时触发
|
|
644
|
+
* @param callback
|
|
645
|
+
* ```tsx
|
|
646
|
+
* function App() {
|
|
647
|
+
* onMount(() => {
|
|
648
|
+
* console.log('App mounted!')
|
|
649
|
+
* })
|
|
650
|
+
* return () => <div>...</div>
|
|
651
|
+
* }
|
|
652
|
+
* ```
|
|
653
|
+
*/
|
|
654
|
+
function onMounted(callback) {
|
|
655
|
+
const component = getSetupContext();
|
|
656
|
+
if (!component.mountCallbacks) {
|
|
657
|
+
component.mountCallbacks = [];
|
|
658
|
+
}
|
|
659
|
+
component.mountCallbacks.push(callback);
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* 当组件视图更新后调用
|
|
663
|
+
* @param callback
|
|
664
|
+
* ```tsx
|
|
665
|
+
* function App() {
|
|
666
|
+
* onUpdated(() => {
|
|
667
|
+
* console.log('App updated!')
|
|
668
|
+
* return () => {
|
|
669
|
+
* console.log('destroy prev update!')
|
|
670
|
+
* }
|
|
671
|
+
* })
|
|
672
|
+
* return () => <div>...</div>
|
|
673
|
+
* }
|
|
674
|
+
* ```
|
|
675
|
+
*/
|
|
676
|
+
function onUpdated(callback) {
|
|
677
|
+
const component = getSetupContext();
|
|
678
|
+
if (!component.updatedCallbacks) {
|
|
679
|
+
component.updatedCallbacks = [];
|
|
680
|
+
}
|
|
681
|
+
component.updatedCallbacks.push(callback);
|
|
682
|
+
return () => {
|
|
683
|
+
const index = component.updatedCallbacks.indexOf(callback);
|
|
684
|
+
if (index > -1) {
|
|
685
|
+
component.updatedCallbacks.splice(index, 1);
|
|
686
|
+
}
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
/**
|
|
690
|
+
* 当组件 props 更新地调用
|
|
691
|
+
* @param callback
|
|
692
|
+
* @example
|
|
693
|
+
* ```tsx
|
|
694
|
+
* function YourComponent(props) {
|
|
695
|
+
* onPropsChanged((currentProps, prevProps) => {
|
|
696
|
+
* console.log(currentProps, prevProps)
|
|
697
|
+
*
|
|
698
|
+
* return () => {
|
|
699
|
+
* console.log('destroy prev changed!')
|
|
700
|
+
* }
|
|
701
|
+
* })
|
|
702
|
+
* return () => {
|
|
703
|
+
* return <div>xxx</div>
|
|
704
|
+
* }
|
|
705
|
+
* }
|
|
706
|
+
* ```
|
|
707
|
+
*/
|
|
708
|
+
function onPropsChanged(callback) {
|
|
709
|
+
const component = getSetupContext();
|
|
710
|
+
if (!component.propsChangedCallbacks) {
|
|
711
|
+
component.propsChangedCallbacks = [];
|
|
712
|
+
}
|
|
713
|
+
component.propsChangedCallbacks.push(callback);
|
|
714
|
+
return () => {
|
|
715
|
+
const index = component.propsChangedCallbacks.indexOf(callback);
|
|
716
|
+
if (index > -1) {
|
|
717
|
+
component.propsChangedCallbacks.splice(index, 1);
|
|
718
|
+
}
|
|
719
|
+
};
|
|
720
|
+
}
|
|
721
|
+
/**
|
|
722
|
+
* 当组件销毁时调用回调函数
|
|
723
|
+
* @param callback
|
|
724
|
+
*/
|
|
725
|
+
function onUnmounted(callback) {
|
|
726
|
+
const component = getSetupContext();
|
|
727
|
+
if (!component.unmountedCallbacks) {
|
|
728
|
+
component.unmountedCallbacks = [];
|
|
729
|
+
}
|
|
730
|
+
component.unmountedCallbacks.push(callback);
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
class DynamicRef {
|
|
734
|
+
constructor(callback) {
|
|
735
|
+
this.callback = callback;
|
|
736
|
+
this.unBindMap = new Map();
|
|
737
|
+
this.targetCaches = new Set();
|
|
738
|
+
}
|
|
739
|
+
bind(value) {
|
|
740
|
+
if (typeof value !== 'object' || value === null) {
|
|
741
|
+
return;
|
|
742
|
+
}
|
|
743
|
+
if (this.targetCaches.has(value)) {
|
|
744
|
+
return;
|
|
745
|
+
}
|
|
746
|
+
const unBindFn = this.callback(value);
|
|
747
|
+
if (typeof unBindFn === 'function') {
|
|
748
|
+
this.unBindMap.set(value, unBindFn);
|
|
749
|
+
}
|
|
750
|
+
this.targetCaches.add(value);
|
|
751
|
+
}
|
|
752
|
+
unBind(value) {
|
|
753
|
+
this.targetCaches.delete(value);
|
|
754
|
+
const unBindFn = this.unBindMap.get(value);
|
|
755
|
+
this.unBindMap.delete(value);
|
|
756
|
+
if (typeof unBindFn === 'function') {
|
|
757
|
+
unBindFn();
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
/**
|
|
762
|
+
* 用于节点渲染完成时获取 DOM 节点
|
|
763
|
+
* @param callback 获取 DOM 节点的回调函数
|
|
764
|
+
* @example
|
|
765
|
+
* ```tsx
|
|
766
|
+
* function App() {
|
|
767
|
+
* const ref = createDynamicRef(node => {
|
|
768
|
+
* function fn() {
|
|
769
|
+
* // do something...
|
|
770
|
+
* }
|
|
771
|
+
* node.addEventListener('click', fn)
|
|
772
|
+
* return () => {
|
|
773
|
+
* node.removeEventListener('click', fn)
|
|
774
|
+
* }
|
|
775
|
+
* })
|
|
776
|
+
* return () => {
|
|
777
|
+
* return <div ref={ref}>xxx</div>
|
|
778
|
+
* }
|
|
779
|
+
* }
|
|
780
|
+
* ```
|
|
781
|
+
*/
|
|
782
|
+
function createDynamicRef(callback) {
|
|
783
|
+
return new DynamicRef(callback);
|
|
784
|
+
}
|
|
785
|
+
const initValue = {};
|
|
786
|
+
class StaticRef extends DynamicRef {
|
|
787
|
+
constructor() {
|
|
788
|
+
let value = initValue;
|
|
789
|
+
let isInit = false;
|
|
790
|
+
super(v => {
|
|
791
|
+
if (v !== initValue && !isInit) {
|
|
792
|
+
value = v;
|
|
793
|
+
isInit = true;
|
|
794
|
+
}
|
|
795
|
+
});
|
|
796
|
+
Object.defineProperty(this, 'current', {
|
|
797
|
+
get() {
|
|
798
|
+
if (value === initValue) {
|
|
799
|
+
return null;
|
|
800
|
+
}
|
|
801
|
+
return value;
|
|
802
|
+
}
|
|
803
|
+
});
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
function createRef() {
|
|
807
|
+
return new StaticRef();
|
|
808
|
+
}
|
|
809
|
+
|
|
642
810
|
const componentSetupStack = [];
|
|
643
811
|
const componentErrorFn = makeError('component');
|
|
644
812
|
function getSetupContext(need = true) {
|
|
@@ -649,6 +817,11 @@ function getSetupContext(need = true) {
|
|
|
649
817
|
}
|
|
650
818
|
return current;
|
|
651
819
|
}
|
|
820
|
+
function toRefs(ref) {
|
|
821
|
+
return (Array.isArray(ref) ? ref : [ref]).filter(i => {
|
|
822
|
+
return i instanceof DynamicRef;
|
|
823
|
+
});
|
|
824
|
+
}
|
|
652
825
|
/**
|
|
653
826
|
* Viewfly 组件管理类,用于管理组件的生命周期,上下文等
|
|
654
827
|
*/
|
|
@@ -795,12 +968,15 @@ class Component extends ReflectiveInjector {
|
|
|
795
968
|
(_c = this.unmountedCallbacks) === null || _c === void 0 ? void 0 : _c.forEach(fn => {
|
|
796
969
|
fn();
|
|
797
970
|
});
|
|
798
|
-
this.
|
|
799
|
-
this.
|
|
800
|
-
this.
|
|
801
|
-
this.
|
|
802
|
-
this.
|
|
803
|
-
this.
|
|
971
|
+
this.parentComponent =
|
|
972
|
+
this.parentInjector =
|
|
973
|
+
this.propsChangedDestroyCallbacks =
|
|
974
|
+
this.updatedDestroyCallbacks =
|
|
975
|
+
this.mountCallbacks =
|
|
976
|
+
this.updatedCallbacks =
|
|
977
|
+
this.propsChangedCallbacks =
|
|
978
|
+
this.unmountedCallbacks = null;
|
|
979
|
+
this.changedSubComponents.clear();
|
|
804
980
|
}
|
|
805
981
|
rendered() {
|
|
806
982
|
this.changedSubComponents.clear();
|
|
@@ -876,177 +1052,6 @@ class Component extends ReflectiveInjector {
|
|
|
876
1052
|
}
|
|
877
1053
|
}
|
|
878
1054
|
}
|
|
879
|
-
function toRefs(ref) {
|
|
880
|
-
return (Array.isArray(ref) ? ref : [ref]).filter(i => {
|
|
881
|
-
return i instanceof DynamicRef;
|
|
882
|
-
});
|
|
883
|
-
}
|
|
884
|
-
/**
|
|
885
|
-
* 当组件第一次渲染完成时触发
|
|
886
|
-
* @param callback
|
|
887
|
-
* ```tsx
|
|
888
|
-
* function App() {
|
|
889
|
-
* onMount(() => {
|
|
890
|
-
* console.log('App mounted!')
|
|
891
|
-
* })
|
|
892
|
-
* return () => <div>...</div>
|
|
893
|
-
* }
|
|
894
|
-
* ```
|
|
895
|
-
*/
|
|
896
|
-
function onMounted(callback) {
|
|
897
|
-
const component = getSetupContext();
|
|
898
|
-
if (!component.mountCallbacks) {
|
|
899
|
-
component.mountCallbacks = [];
|
|
900
|
-
}
|
|
901
|
-
component.mountCallbacks.push(callback);
|
|
902
|
-
}
|
|
903
|
-
/**
|
|
904
|
-
* 当组件视图更新后调用
|
|
905
|
-
* @param callback
|
|
906
|
-
* ```tsx
|
|
907
|
-
* function App() {
|
|
908
|
-
* onUpdated(() => {
|
|
909
|
-
* console.log('App updated!')
|
|
910
|
-
* return () => {
|
|
911
|
-
* console.log('destroy prev update!')
|
|
912
|
-
* }
|
|
913
|
-
* })
|
|
914
|
-
* return () => <div>...</div>
|
|
915
|
-
* }
|
|
916
|
-
* ```
|
|
917
|
-
*/
|
|
918
|
-
function onUpdated(callback) {
|
|
919
|
-
const component = getSetupContext();
|
|
920
|
-
if (!component.updatedCallbacks) {
|
|
921
|
-
component.updatedCallbacks = [];
|
|
922
|
-
}
|
|
923
|
-
component.updatedCallbacks.push(callback);
|
|
924
|
-
return () => {
|
|
925
|
-
const index = component.updatedCallbacks.indexOf(callback);
|
|
926
|
-
if (index > -1) {
|
|
927
|
-
component.updatedCallbacks.splice(index, 1);
|
|
928
|
-
}
|
|
929
|
-
};
|
|
930
|
-
}
|
|
931
|
-
/**
|
|
932
|
-
* 当组件 props 更新地调用
|
|
933
|
-
* @param callback
|
|
934
|
-
* @example
|
|
935
|
-
* ```tsx
|
|
936
|
-
* function YourComponent(props) {
|
|
937
|
-
* onPropsChanged((currentProps, prevProps) => {
|
|
938
|
-
* console.log(currentProps, prevProps)
|
|
939
|
-
*
|
|
940
|
-
* return () => {
|
|
941
|
-
* console.log('destroy prev changed!')
|
|
942
|
-
* }
|
|
943
|
-
* })
|
|
944
|
-
* return () => {
|
|
945
|
-
* return <div>xxx</div>
|
|
946
|
-
* }
|
|
947
|
-
* }
|
|
948
|
-
* ```
|
|
949
|
-
*/
|
|
950
|
-
function onPropsChanged(callback) {
|
|
951
|
-
const component = getSetupContext();
|
|
952
|
-
if (!component.propsChangedCallbacks) {
|
|
953
|
-
component.propsChangedCallbacks = [];
|
|
954
|
-
}
|
|
955
|
-
component.propsChangedCallbacks.push(callback);
|
|
956
|
-
return () => {
|
|
957
|
-
const index = component.propsChangedCallbacks.indexOf(callback);
|
|
958
|
-
if (index > -1) {
|
|
959
|
-
component.propsChangedCallbacks.splice(index, 1);
|
|
960
|
-
}
|
|
961
|
-
};
|
|
962
|
-
}
|
|
963
|
-
/**
|
|
964
|
-
* 当组件销毁时调用回调函数
|
|
965
|
-
* @param callback
|
|
966
|
-
*/
|
|
967
|
-
function onUnmounted(callback) {
|
|
968
|
-
const component = getSetupContext();
|
|
969
|
-
if (!component.unmountedCallbacks) {
|
|
970
|
-
component.unmountedCallbacks = [];
|
|
971
|
-
}
|
|
972
|
-
component.unmountedCallbacks.push(callback);
|
|
973
|
-
}
|
|
974
|
-
class DynamicRef {
|
|
975
|
-
constructor(callback) {
|
|
976
|
-
this.callback = callback;
|
|
977
|
-
this.unBindMap = new Map();
|
|
978
|
-
this.targetCaches = new Set();
|
|
979
|
-
}
|
|
980
|
-
bind(value) {
|
|
981
|
-
if (typeof value !== 'object' || value === null) {
|
|
982
|
-
return;
|
|
983
|
-
}
|
|
984
|
-
if (this.targetCaches.has(value)) {
|
|
985
|
-
return;
|
|
986
|
-
}
|
|
987
|
-
const unBindFn = this.callback(value);
|
|
988
|
-
if (typeof unBindFn === 'function') {
|
|
989
|
-
this.unBindMap.set(value, unBindFn);
|
|
990
|
-
}
|
|
991
|
-
this.targetCaches.add(value);
|
|
992
|
-
}
|
|
993
|
-
unBind(value) {
|
|
994
|
-
this.targetCaches.delete(value);
|
|
995
|
-
const unBindFn = this.unBindMap.get(value);
|
|
996
|
-
this.unBindMap.delete(value);
|
|
997
|
-
if (typeof unBindFn === 'function') {
|
|
998
|
-
unBindFn();
|
|
999
|
-
}
|
|
1000
|
-
}
|
|
1001
|
-
}
|
|
1002
|
-
/**
|
|
1003
|
-
* 用于节点渲染完成时获取 DOM 节点
|
|
1004
|
-
* @param callback 获取 DOM 节点的回调函数
|
|
1005
|
-
* @example
|
|
1006
|
-
* ```tsx
|
|
1007
|
-
* function App() {
|
|
1008
|
-
* const ref = createDynamicRef(node => {
|
|
1009
|
-
* function fn() {
|
|
1010
|
-
* // do something...
|
|
1011
|
-
* }
|
|
1012
|
-
* node.addEventListener('click', fn)
|
|
1013
|
-
* return () => {
|
|
1014
|
-
* node.removeEventListener('click', fn)
|
|
1015
|
-
* }
|
|
1016
|
-
* })
|
|
1017
|
-
* return () => {
|
|
1018
|
-
* return <div ref={ref}>xxx</div>
|
|
1019
|
-
* }
|
|
1020
|
-
* }
|
|
1021
|
-
* ```
|
|
1022
|
-
*/
|
|
1023
|
-
function createDynamicRef(callback) {
|
|
1024
|
-
return new DynamicRef(callback);
|
|
1025
|
-
}
|
|
1026
|
-
const initValue = {};
|
|
1027
|
-
class StaticRef extends DynamicRef {
|
|
1028
|
-
constructor() {
|
|
1029
|
-
let value = initValue;
|
|
1030
|
-
let isInit = false;
|
|
1031
|
-
super(v => {
|
|
1032
|
-
if (v !== initValue && !isInit) {
|
|
1033
|
-
value = v;
|
|
1034
|
-
isInit = true;
|
|
1035
|
-
}
|
|
1036
|
-
});
|
|
1037
|
-
Object.defineProperty(this, 'current', {
|
|
1038
|
-
get() {
|
|
1039
|
-
if (value === initValue) {
|
|
1040
|
-
return null;
|
|
1041
|
-
}
|
|
1042
|
-
return value;
|
|
1043
|
-
}
|
|
1044
|
-
});
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
function createRef() {
|
|
1048
|
-
return new StaticRef();
|
|
1049
|
-
}
|
|
1050
1055
|
/**
|
|
1051
1056
|
* 给组件添加注解
|
|
1052
1057
|
* @param annotation
|
|
@@ -1087,14 +1092,25 @@ function getCurrentInstance() {
|
|
|
1087
1092
|
return getSetupContext();
|
|
1088
1093
|
}
|
|
1089
1094
|
|
|
1090
|
-
class NativeRenderer {
|
|
1091
|
-
}
|
|
1092
|
-
|
|
1093
1095
|
function Fragment(props) {
|
|
1094
1096
|
return () => {
|
|
1095
1097
|
return props.children;
|
|
1096
1098
|
};
|
|
1097
1099
|
}
|
|
1100
|
+
function jsx(type, props, key) {
|
|
1101
|
+
return JSXNodeFactory.createNode(type, props, key);
|
|
1102
|
+
}
|
|
1103
|
+
const jsxs = jsx;
|
|
1104
|
+
const JSXNodeFactory = {
|
|
1105
|
+
createNode(type, props, key) {
|
|
1106
|
+
return {
|
|
1107
|
+
type,
|
|
1108
|
+
props,
|
|
1109
|
+
key
|
|
1110
|
+
};
|
|
1111
|
+
}
|
|
1112
|
+
};
|
|
1113
|
+
|
|
1098
1114
|
function Context(props) {
|
|
1099
1115
|
function createContextComponent(providers) {
|
|
1100
1116
|
return withAnnotation({
|
|
@@ -1118,19 +1134,9 @@ function Context(props) {
|
|
|
1118
1134
|
});
|
|
1119
1135
|
};
|
|
1120
1136
|
}
|
|
1121
|
-
|
|
1122
|
-
|
|
1137
|
+
|
|
1138
|
+
class NativeRenderer {
|
|
1123
1139
|
}
|
|
1124
|
-
const jsxs = jsx;
|
|
1125
|
-
const JSXNodeFactory = {
|
|
1126
|
-
createNode(type, props, key) {
|
|
1127
|
-
return {
|
|
1128
|
-
type,
|
|
1129
|
-
props,
|
|
1130
|
-
key
|
|
1131
|
-
};
|
|
1132
|
-
}
|
|
1133
|
-
};
|
|
1134
1140
|
|
|
1135
1141
|
function withMemo(canUseMemo, render) {
|
|
1136
1142
|
return {
|
package/bundles/index.js
CHANGED
|
@@ -641,6 +641,174 @@ function popListener() {
|
|
|
641
641
|
listeners.pop();
|
|
642
642
|
}
|
|
643
643
|
|
|
644
|
+
/**
|
|
645
|
+
* 当组件第一次渲染完成时触发
|
|
646
|
+
* @param callback
|
|
647
|
+
* ```tsx
|
|
648
|
+
* function App() {
|
|
649
|
+
* onMount(() => {
|
|
650
|
+
* console.log('App mounted!')
|
|
651
|
+
* })
|
|
652
|
+
* return () => <div>...</div>
|
|
653
|
+
* }
|
|
654
|
+
* ```
|
|
655
|
+
*/
|
|
656
|
+
function onMounted(callback) {
|
|
657
|
+
const component = getSetupContext();
|
|
658
|
+
if (!component.mountCallbacks) {
|
|
659
|
+
component.mountCallbacks = [];
|
|
660
|
+
}
|
|
661
|
+
component.mountCallbacks.push(callback);
|
|
662
|
+
}
|
|
663
|
+
/**
|
|
664
|
+
* 当组件视图更新后调用
|
|
665
|
+
* @param callback
|
|
666
|
+
* ```tsx
|
|
667
|
+
* function App() {
|
|
668
|
+
* onUpdated(() => {
|
|
669
|
+
* console.log('App updated!')
|
|
670
|
+
* return () => {
|
|
671
|
+
* console.log('destroy prev update!')
|
|
672
|
+
* }
|
|
673
|
+
* })
|
|
674
|
+
* return () => <div>...</div>
|
|
675
|
+
* }
|
|
676
|
+
* ```
|
|
677
|
+
*/
|
|
678
|
+
function onUpdated(callback) {
|
|
679
|
+
const component = getSetupContext();
|
|
680
|
+
if (!component.updatedCallbacks) {
|
|
681
|
+
component.updatedCallbacks = [];
|
|
682
|
+
}
|
|
683
|
+
component.updatedCallbacks.push(callback);
|
|
684
|
+
return () => {
|
|
685
|
+
const index = component.updatedCallbacks.indexOf(callback);
|
|
686
|
+
if (index > -1) {
|
|
687
|
+
component.updatedCallbacks.splice(index, 1);
|
|
688
|
+
}
|
|
689
|
+
};
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* 当组件 props 更新地调用
|
|
693
|
+
* @param callback
|
|
694
|
+
* @example
|
|
695
|
+
* ```tsx
|
|
696
|
+
* function YourComponent(props) {
|
|
697
|
+
* onPropsChanged((currentProps, prevProps) => {
|
|
698
|
+
* console.log(currentProps, prevProps)
|
|
699
|
+
*
|
|
700
|
+
* return () => {
|
|
701
|
+
* console.log('destroy prev changed!')
|
|
702
|
+
* }
|
|
703
|
+
* })
|
|
704
|
+
* return () => {
|
|
705
|
+
* return <div>xxx</div>
|
|
706
|
+
* }
|
|
707
|
+
* }
|
|
708
|
+
* ```
|
|
709
|
+
*/
|
|
710
|
+
function onPropsChanged(callback) {
|
|
711
|
+
const component = getSetupContext();
|
|
712
|
+
if (!component.propsChangedCallbacks) {
|
|
713
|
+
component.propsChangedCallbacks = [];
|
|
714
|
+
}
|
|
715
|
+
component.propsChangedCallbacks.push(callback);
|
|
716
|
+
return () => {
|
|
717
|
+
const index = component.propsChangedCallbacks.indexOf(callback);
|
|
718
|
+
if (index > -1) {
|
|
719
|
+
component.propsChangedCallbacks.splice(index, 1);
|
|
720
|
+
}
|
|
721
|
+
};
|
|
722
|
+
}
|
|
723
|
+
/**
|
|
724
|
+
* 当组件销毁时调用回调函数
|
|
725
|
+
* @param callback
|
|
726
|
+
*/
|
|
727
|
+
function onUnmounted(callback) {
|
|
728
|
+
const component = getSetupContext();
|
|
729
|
+
if (!component.unmountedCallbacks) {
|
|
730
|
+
component.unmountedCallbacks = [];
|
|
731
|
+
}
|
|
732
|
+
component.unmountedCallbacks.push(callback);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
class DynamicRef {
|
|
736
|
+
constructor(callback) {
|
|
737
|
+
this.callback = callback;
|
|
738
|
+
this.unBindMap = new Map();
|
|
739
|
+
this.targetCaches = new Set();
|
|
740
|
+
}
|
|
741
|
+
bind(value) {
|
|
742
|
+
if (typeof value !== 'object' || value === null) {
|
|
743
|
+
return;
|
|
744
|
+
}
|
|
745
|
+
if (this.targetCaches.has(value)) {
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
const unBindFn = this.callback(value);
|
|
749
|
+
if (typeof unBindFn === 'function') {
|
|
750
|
+
this.unBindMap.set(value, unBindFn);
|
|
751
|
+
}
|
|
752
|
+
this.targetCaches.add(value);
|
|
753
|
+
}
|
|
754
|
+
unBind(value) {
|
|
755
|
+
this.targetCaches.delete(value);
|
|
756
|
+
const unBindFn = this.unBindMap.get(value);
|
|
757
|
+
this.unBindMap.delete(value);
|
|
758
|
+
if (typeof unBindFn === 'function') {
|
|
759
|
+
unBindFn();
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
/**
|
|
764
|
+
* 用于节点渲染完成时获取 DOM 节点
|
|
765
|
+
* @param callback 获取 DOM 节点的回调函数
|
|
766
|
+
* @example
|
|
767
|
+
* ```tsx
|
|
768
|
+
* function App() {
|
|
769
|
+
* const ref = createDynamicRef(node => {
|
|
770
|
+
* function fn() {
|
|
771
|
+
* // do something...
|
|
772
|
+
* }
|
|
773
|
+
* node.addEventListener('click', fn)
|
|
774
|
+
* return () => {
|
|
775
|
+
* node.removeEventListener('click', fn)
|
|
776
|
+
* }
|
|
777
|
+
* })
|
|
778
|
+
* return () => {
|
|
779
|
+
* return <div ref={ref}>xxx</div>
|
|
780
|
+
* }
|
|
781
|
+
* }
|
|
782
|
+
* ```
|
|
783
|
+
*/
|
|
784
|
+
function createDynamicRef(callback) {
|
|
785
|
+
return new DynamicRef(callback);
|
|
786
|
+
}
|
|
787
|
+
const initValue = {};
|
|
788
|
+
class StaticRef extends DynamicRef {
|
|
789
|
+
constructor() {
|
|
790
|
+
let value = initValue;
|
|
791
|
+
let isInit = false;
|
|
792
|
+
super(v => {
|
|
793
|
+
if (v !== initValue && !isInit) {
|
|
794
|
+
value = v;
|
|
795
|
+
isInit = true;
|
|
796
|
+
}
|
|
797
|
+
});
|
|
798
|
+
Object.defineProperty(this, 'current', {
|
|
799
|
+
get() {
|
|
800
|
+
if (value === initValue) {
|
|
801
|
+
return null;
|
|
802
|
+
}
|
|
803
|
+
return value;
|
|
804
|
+
}
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
function createRef() {
|
|
809
|
+
return new StaticRef();
|
|
810
|
+
}
|
|
811
|
+
|
|
644
812
|
const componentSetupStack = [];
|
|
645
813
|
const componentErrorFn = makeError('component');
|
|
646
814
|
function getSetupContext(need = true) {
|
|
@@ -651,6 +819,11 @@ function getSetupContext(need = true) {
|
|
|
651
819
|
}
|
|
652
820
|
return current;
|
|
653
821
|
}
|
|
822
|
+
function toRefs(ref) {
|
|
823
|
+
return (Array.isArray(ref) ? ref : [ref]).filter(i => {
|
|
824
|
+
return i instanceof DynamicRef;
|
|
825
|
+
});
|
|
826
|
+
}
|
|
654
827
|
/**
|
|
655
828
|
* Viewfly 组件管理类,用于管理组件的生命周期,上下文等
|
|
656
829
|
*/
|
|
@@ -797,12 +970,15 @@ class Component extends ReflectiveInjector {
|
|
|
797
970
|
(_c = this.unmountedCallbacks) === null || _c === void 0 ? void 0 : _c.forEach(fn => {
|
|
798
971
|
fn();
|
|
799
972
|
});
|
|
800
|
-
this.
|
|
801
|
-
this.
|
|
802
|
-
this.
|
|
803
|
-
this.
|
|
804
|
-
this.
|
|
805
|
-
this.
|
|
973
|
+
this.parentComponent =
|
|
974
|
+
this.parentInjector =
|
|
975
|
+
this.propsChangedDestroyCallbacks =
|
|
976
|
+
this.updatedDestroyCallbacks =
|
|
977
|
+
this.mountCallbacks =
|
|
978
|
+
this.updatedCallbacks =
|
|
979
|
+
this.propsChangedCallbacks =
|
|
980
|
+
this.unmountedCallbacks = null;
|
|
981
|
+
this.changedSubComponents.clear();
|
|
806
982
|
}
|
|
807
983
|
rendered() {
|
|
808
984
|
this.changedSubComponents.clear();
|
|
@@ -878,177 +1054,6 @@ class Component extends ReflectiveInjector {
|
|
|
878
1054
|
}
|
|
879
1055
|
}
|
|
880
1056
|
}
|
|
881
|
-
function toRefs(ref) {
|
|
882
|
-
return (Array.isArray(ref) ? ref : [ref]).filter(i => {
|
|
883
|
-
return i instanceof DynamicRef;
|
|
884
|
-
});
|
|
885
|
-
}
|
|
886
|
-
/**
|
|
887
|
-
* 当组件第一次渲染完成时触发
|
|
888
|
-
* @param callback
|
|
889
|
-
* ```tsx
|
|
890
|
-
* function App() {
|
|
891
|
-
* onMount(() => {
|
|
892
|
-
* console.log('App mounted!')
|
|
893
|
-
* })
|
|
894
|
-
* return () => <div>...</div>
|
|
895
|
-
* }
|
|
896
|
-
* ```
|
|
897
|
-
*/
|
|
898
|
-
function onMounted(callback) {
|
|
899
|
-
const component = getSetupContext();
|
|
900
|
-
if (!component.mountCallbacks) {
|
|
901
|
-
component.mountCallbacks = [];
|
|
902
|
-
}
|
|
903
|
-
component.mountCallbacks.push(callback);
|
|
904
|
-
}
|
|
905
|
-
/**
|
|
906
|
-
* 当组件视图更新后调用
|
|
907
|
-
* @param callback
|
|
908
|
-
* ```tsx
|
|
909
|
-
* function App() {
|
|
910
|
-
* onUpdated(() => {
|
|
911
|
-
* console.log('App updated!')
|
|
912
|
-
* return () => {
|
|
913
|
-
* console.log('destroy prev update!')
|
|
914
|
-
* }
|
|
915
|
-
* })
|
|
916
|
-
* return () => <div>...</div>
|
|
917
|
-
* }
|
|
918
|
-
* ```
|
|
919
|
-
*/
|
|
920
|
-
function onUpdated(callback) {
|
|
921
|
-
const component = getSetupContext();
|
|
922
|
-
if (!component.updatedCallbacks) {
|
|
923
|
-
component.updatedCallbacks = [];
|
|
924
|
-
}
|
|
925
|
-
component.updatedCallbacks.push(callback);
|
|
926
|
-
return () => {
|
|
927
|
-
const index = component.updatedCallbacks.indexOf(callback);
|
|
928
|
-
if (index > -1) {
|
|
929
|
-
component.updatedCallbacks.splice(index, 1);
|
|
930
|
-
}
|
|
931
|
-
};
|
|
932
|
-
}
|
|
933
|
-
/**
|
|
934
|
-
* 当组件 props 更新地调用
|
|
935
|
-
* @param callback
|
|
936
|
-
* @example
|
|
937
|
-
* ```tsx
|
|
938
|
-
* function YourComponent(props) {
|
|
939
|
-
* onPropsChanged((currentProps, prevProps) => {
|
|
940
|
-
* console.log(currentProps, prevProps)
|
|
941
|
-
*
|
|
942
|
-
* return () => {
|
|
943
|
-
* console.log('destroy prev changed!')
|
|
944
|
-
* }
|
|
945
|
-
* })
|
|
946
|
-
* return () => {
|
|
947
|
-
* return <div>xxx</div>
|
|
948
|
-
* }
|
|
949
|
-
* }
|
|
950
|
-
* ```
|
|
951
|
-
*/
|
|
952
|
-
function onPropsChanged(callback) {
|
|
953
|
-
const component = getSetupContext();
|
|
954
|
-
if (!component.propsChangedCallbacks) {
|
|
955
|
-
component.propsChangedCallbacks = [];
|
|
956
|
-
}
|
|
957
|
-
component.propsChangedCallbacks.push(callback);
|
|
958
|
-
return () => {
|
|
959
|
-
const index = component.propsChangedCallbacks.indexOf(callback);
|
|
960
|
-
if (index > -1) {
|
|
961
|
-
component.propsChangedCallbacks.splice(index, 1);
|
|
962
|
-
}
|
|
963
|
-
};
|
|
964
|
-
}
|
|
965
|
-
/**
|
|
966
|
-
* 当组件销毁时调用回调函数
|
|
967
|
-
* @param callback
|
|
968
|
-
*/
|
|
969
|
-
function onUnmounted(callback) {
|
|
970
|
-
const component = getSetupContext();
|
|
971
|
-
if (!component.unmountedCallbacks) {
|
|
972
|
-
component.unmountedCallbacks = [];
|
|
973
|
-
}
|
|
974
|
-
component.unmountedCallbacks.push(callback);
|
|
975
|
-
}
|
|
976
|
-
class DynamicRef {
|
|
977
|
-
constructor(callback) {
|
|
978
|
-
this.callback = callback;
|
|
979
|
-
this.unBindMap = new Map();
|
|
980
|
-
this.targetCaches = new Set();
|
|
981
|
-
}
|
|
982
|
-
bind(value) {
|
|
983
|
-
if (typeof value !== 'object' || value === null) {
|
|
984
|
-
return;
|
|
985
|
-
}
|
|
986
|
-
if (this.targetCaches.has(value)) {
|
|
987
|
-
return;
|
|
988
|
-
}
|
|
989
|
-
const unBindFn = this.callback(value);
|
|
990
|
-
if (typeof unBindFn === 'function') {
|
|
991
|
-
this.unBindMap.set(value, unBindFn);
|
|
992
|
-
}
|
|
993
|
-
this.targetCaches.add(value);
|
|
994
|
-
}
|
|
995
|
-
unBind(value) {
|
|
996
|
-
this.targetCaches.delete(value);
|
|
997
|
-
const unBindFn = this.unBindMap.get(value);
|
|
998
|
-
this.unBindMap.delete(value);
|
|
999
|
-
if (typeof unBindFn === 'function') {
|
|
1000
|
-
unBindFn();
|
|
1001
|
-
}
|
|
1002
|
-
}
|
|
1003
|
-
}
|
|
1004
|
-
/**
|
|
1005
|
-
* 用于节点渲染完成时获取 DOM 节点
|
|
1006
|
-
* @param callback 获取 DOM 节点的回调函数
|
|
1007
|
-
* @example
|
|
1008
|
-
* ```tsx
|
|
1009
|
-
* function App() {
|
|
1010
|
-
* const ref = createDynamicRef(node => {
|
|
1011
|
-
* function fn() {
|
|
1012
|
-
* // do something...
|
|
1013
|
-
* }
|
|
1014
|
-
* node.addEventListener('click', fn)
|
|
1015
|
-
* return () => {
|
|
1016
|
-
* node.removeEventListener('click', fn)
|
|
1017
|
-
* }
|
|
1018
|
-
* })
|
|
1019
|
-
* return () => {
|
|
1020
|
-
* return <div ref={ref}>xxx</div>
|
|
1021
|
-
* }
|
|
1022
|
-
* }
|
|
1023
|
-
* ```
|
|
1024
|
-
*/
|
|
1025
|
-
function createDynamicRef(callback) {
|
|
1026
|
-
return new DynamicRef(callback);
|
|
1027
|
-
}
|
|
1028
|
-
const initValue = {};
|
|
1029
|
-
class StaticRef extends DynamicRef {
|
|
1030
|
-
constructor() {
|
|
1031
|
-
let value = initValue;
|
|
1032
|
-
let isInit = false;
|
|
1033
|
-
super(v => {
|
|
1034
|
-
if (v !== initValue && !isInit) {
|
|
1035
|
-
value = v;
|
|
1036
|
-
isInit = true;
|
|
1037
|
-
}
|
|
1038
|
-
});
|
|
1039
|
-
Object.defineProperty(this, 'current', {
|
|
1040
|
-
get() {
|
|
1041
|
-
if (value === initValue) {
|
|
1042
|
-
return null;
|
|
1043
|
-
}
|
|
1044
|
-
return value;
|
|
1045
|
-
}
|
|
1046
|
-
});
|
|
1047
|
-
}
|
|
1048
|
-
}
|
|
1049
|
-
function createRef() {
|
|
1050
|
-
return new StaticRef();
|
|
1051
|
-
}
|
|
1052
1057
|
/**
|
|
1053
1058
|
* 给组件添加注解
|
|
1054
1059
|
* @param annotation
|
|
@@ -1089,14 +1094,25 @@ function getCurrentInstance() {
|
|
|
1089
1094
|
return getSetupContext();
|
|
1090
1095
|
}
|
|
1091
1096
|
|
|
1092
|
-
class NativeRenderer {
|
|
1093
|
-
}
|
|
1094
|
-
|
|
1095
1097
|
function Fragment(props) {
|
|
1096
1098
|
return () => {
|
|
1097
1099
|
return props.children;
|
|
1098
1100
|
};
|
|
1099
1101
|
}
|
|
1102
|
+
function jsx(type, props, key) {
|
|
1103
|
+
return JSXNodeFactory.createNode(type, props, key);
|
|
1104
|
+
}
|
|
1105
|
+
const jsxs = jsx;
|
|
1106
|
+
const JSXNodeFactory = {
|
|
1107
|
+
createNode(type, props, key) {
|
|
1108
|
+
return {
|
|
1109
|
+
type,
|
|
1110
|
+
props,
|
|
1111
|
+
key
|
|
1112
|
+
};
|
|
1113
|
+
}
|
|
1114
|
+
};
|
|
1115
|
+
|
|
1100
1116
|
function Context(props) {
|
|
1101
1117
|
function createContextComponent(providers) {
|
|
1102
1118
|
return withAnnotation({
|
|
@@ -1120,19 +1136,9 @@ function Context(props) {
|
|
|
1120
1136
|
});
|
|
1121
1137
|
};
|
|
1122
1138
|
}
|
|
1123
|
-
|
|
1124
|
-
|
|
1139
|
+
|
|
1140
|
+
class NativeRenderer {
|
|
1125
1141
|
}
|
|
1126
|
-
const jsxs = jsx;
|
|
1127
|
-
const JSXNodeFactory = {
|
|
1128
|
-
createNode(type, props, key) {
|
|
1129
|
-
return {
|
|
1130
|
-
type,
|
|
1131
|
-
props,
|
|
1132
|
-
key
|
|
1133
|
-
};
|
|
1134
|
-
}
|
|
1135
|
-
};
|
|
1136
1142
|
|
|
1137
1143
|
function withMemo(canUseMemo, render) {
|
|
1138
1144
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viewfly/core",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.7",
|
|
4
4
|
"description": "Viewfly is a simple and easy-to-use JavaScript framework with an intuitive development experience.",
|
|
5
5
|
"main": "./bundles/index.js",
|
|
6
6
|
"module": "./bundles/index.esm.js",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"bugs": {
|
|
51
51
|
"url": "https://github.com/viewfly/viewfly.git/issues"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "d4a5c0ac00b6fb203d8d6c9970e3ef1093cd9782",
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"reflect-metadata": "^0.2.2"
|
|
56
56
|
}
|