# teventbus

> 全新的事件总线 完全的typescript支持 支持获取监听返回 无其它依赖

Latest version **1.0.6** (published 2022-10-23) · ISC license · 0 weekly downloads

## Install

```sh
npm install teventbus
pnpm add teventbus
yarn add teventbus
bun add teventbus
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.6 |
| Published | 2022-10-23 |
| First published | 2022-10-23 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | cocao |
| Maintainers | chrrg |

## Links

- npm: https://www.npmjs.com/package/teventbus
- npm.io page: https://npm.io/package/teventbus

## Recent versions

- 1.0.6 (latest) — 2022-10-23

## README

# EventBus
事件总线

1. 只有事件总线，体积小，无任何依赖
2. 完全的typescript支持
3. 技术栈无关，可以在react、vue、angular、nodejs等框架中使用
4. 使用灵活，设计简洁，功能强大

# 示例
## 基本使用
```ts
type Event = {
    onChange: (value: string) => void;
}
const eventBus = new EventBus();

useEffect(()=>{
    const off = eventBus.on('onChange', (value: string) => {
        console.log(value,'world');
    });
    return ()=>{
        off();//取消监听
    };
},[]);


const click = ()=>{
    eventBus.emit('onChange', 'hello');
}
```
## 带返回值的emit
```ts
type Event = {
    add10: (value: number) => number;
    sub20: (value: number) => number;
    print: (value: number) => void;
}
const eventBus = new EventBus();

useEffect(()=>eventBus.on('add10', (value: number) => {
    return value+10;
}),[]);
useEffect(()=>eventBus.on('sub20', (value: number) => {
    return value-20;
}),[]);
useEffect(()=>eventBus.on('print', (value: number) => {
    console.log(value);
}),[]);
const click = ()=>{
    const [num] = eventBus.emit('add10', 20);
    const [num2] = eventBus.emit('sub20', num);
    eventBus.emit('print', num2);// 示例输出10
}
```

## 类型拓展
```ts
type Event = {
    onChange: (value: string) => void;
}
const eventBus = new EventBus().extends<Event>();// 拓展事件的类型

useEffect(()=>eventBus.on('onChange', (value: string) => {
    console.log(value, 'world');
}),[]);

const click = ()=>{
    eventBus.emit('onChange', 'hello');
}
```

## 实例化新事件总线
```ts
const eventBus = new EventBus();
eventBus.newInstance();
```

## off取消
```ts
const eventBus = new EventBus();
const onChange = ()=>{
    console.log('hello');
}
useEffect(()=>{
    eventBus.on('onChange', onChange);
    return ()=>{
        eventBus.off('onChange', onChange);//也可以销毁监听
    }
},[])
```

## emit返回值等待promise
```ts
const eventBus = new EventBus<{
    GetUserInfo: () => Promise<{
        name: string;
        age: number;
    }>;
}>();
useEffect(()=>{
    return eventBus.on('GetUserInfo', async () => {
        return {
            name: '张三',
            age: 18
        };
    });
} ,[]);
useCallback(async ()=>{
    const [{name, age}] = await Promise.all(eventBus.emit('GetUserInfo'));
    console.log(name, age);
} ,[]);
```

---
_Source: https://npm.io/package/teventbus · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
