1.0.11 • Published 1 year ago

@evio/moduare v1.0.11

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

@evio/moduare

模块生命周期控制器,能够根据以来自启动,也能根据依赖自销毁。只要满足启动或销毁条件,即可全部自动处理。

Install

$ npm i @evio/moduare

Usage

import { Component, Module, Dependency, terminateComponent, initializeComponent, listen } from '@evio/moduare';

@Module()
class A extends Component<{ value: number }> {
  public setup() {
    console.log('A inited', this.props.value);
    return () => {
      console.log('A destoryed');
    }
  }
}

@Module()
// 或者使用参数
// @Module({ dependencies: [A] })
class B extends Component<{ value: number }> {
  @Dependency(A) public readonly a: A;
  public async setup() {
    console.log('B inited', this.props.value);
    console.log(this.a);
    return () => {
      console.log('B destoryed');
    }
  }
}

listen(); // 开始监听组件变化

const PromiseA = initializeComponent(A, { value: 1 });
const PromiseB = initializeComponent(B, { value: 2 });
Promise.all([PromiseA, PromiseB])
  // 销毁A将优先销毁B
  .then(() => terminateComponent(A))
  // 重建A后,B即满足条件,B也将重建
  .then(() => initializeComponent(A, { value: 3 }))

initializeComponent

初始化组建,返回一个被初始化的组建对象

定义:

declare function initializeComponent<T extends Component = Component>(clazz: IClazz<T>, props?: PickComponentProps<T>): Promise<T>;

使用:

const PromiseA = initializeComponent(A, { value: 1 });

注意Props为当前使用组件时候的props数据

terminateComponent

销毁组件

定义:

declare function terminateComponent<T extends Component = Component>(clazz: IClazz<T>): Promise<void>;

使用:

const PromiseA = terminateComponent(A);

listen

监听组件变化

定义:

declare function listen(time?: number): () => void;

time 是监听时间间隔

使用:

listen(3000); // 3秒一次

Create a new component

构建一个新组件。组件必须继承自模块提供的Component类。此类需要指定组件的props类型。定义如下:

declare abstract class Component<T extends object = {}> {
  __status__: -1 | 0 | 1;
  __terminater__: IComponentSetupReturnType;
  __error__: any;
  readonly meta: Meta<Component<T>>;
  readonly props: T;
  abstract setup(): IComponentSetupReturnType | Promise<IComponentSetupReturnType>;
  constructor(props: T);
}

组件还必须具备一个setup方法用于初始化和卸载。

import { Component, Module, Dependency } from '@evio/moduare';

@Module()
class A extends Component<{ value: number }> {
  @Dependency(ABC) private readonly abc: ABC;
  public setup() {
    // 这里运行的代码即是初始化代码
    console.log('A inited', this.props.value);
    this.abc;
    return () => {
      // 这个返回的函数就是卸载时候运行的代码函数
      console.log('A destoryed');
    }
  }
}
1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago