# @feizheng/react-event-manager

> Event bus meet react.

Latest version **1.0.1** (published 2020-03-22) · MIT license · 0 weekly downloads

## Install

```sh
npm install @feizheng/react-event-manager
pnpm add @feizheng/react-event-manager
yarn add @feizheng/react-event-manager
bun add @feizheng/react-event-manager
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2020-03-22 |
| First published | 2020-03-22 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 11.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | afei |
| Maintainers | afeiship |
| Keywords | react, component |

## Links

- npm: https://www.npmjs.com/package/@feizheng/react-event-manager
- Repository: https://github.com/afeiship/react-event-manager
- Homepage: https://github.com/afeiship/react-event-manager#readme
- Issues: https://github.com/afeiship/react-event-manager/issues
- npm.io page: https://npm.io/package/@feizheng/react-event-manager

## Dependencies (4)

- [classnames](https://npm.io/package/classnames.md) ^2.2.6
- [prop-types](https://npm.io/package/prop-types.md) ^15.7.2
- [@feizheng/noop](https://npm.io/package/@feizheng/noop.md) ^1.0.0
- [@feizheng/webpack-lib-kits](https://npm.io/package/@feizheng/webpack-lib-kits.md) ^1.1.9

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 1.0.1 (latest) — 2020-03-22

## README

# react-event-manager
> Event bus meet react.

## installation
```shell
npm install -S @feizheng/react-event-manager
```

## update
```shell
npm update @feizheng/react-event-manager
```

## properties
| property  | type     | default | description                      |
| --------- | -------- | ------- | -------------------------------- |
| className | String   | -       | -                                |
| value     | Any      | -       | The app instance                 |
| inject    | Function | -       | The injector for you application |

## usage
1. import css
  ```scss
  @import "~@feizheng/react-event-manager/dist/style.scss";

  // customize your styles:
  $react-event-manager-options: ()
  ```
2. import js
  ```js
  /*1. app.js register the event-manager(eventBus) for SPA `app instance` */
  import ReactEventManager from '../src/main';
  import ReactDOM from 'react-dom';
  import React from 'react';
  import Button from './components/button';
  import Panel from './components/panel';
  import EventMitt from '@feizheng/event-mitt';
  import './assets/style.scss';

  class App extends React.Component {
    constructor(props) {
      super(props);
      Object.assign(this, EventMitt);
    }

    render() {
      return (
        <ReactEventManager value={this}>
          <div className="app-container">
            <Panel />
            <Button>I AM a button</Button>
          </div>
        </ReactEventManager>
      );
    }
  }

  ReactDOM.render(<App />, document.getElementById('app'));


  /*2. publish: panel.js emit the event: ok/cancel */
  import React from 'react';
  import { event } from '@/main';

  @event
  export default class extends React.Component {
    componentDidMount() {
      setTimeout(() => {
        const { $app } = this.props;
        $app.emit('panel:ok', {
          data: [1, 2, 3]
        });
      }, 2000);
    }

    render() {
      return (
        <div className="panel">
          <h1>Panel title</h1>
          <p>I am a panel</p>
          <button
            onClick={(e) => {
              this.props.$app.emit('panel:cancel');
            }}>
            Panel will cancel action
          </button>
        </div>
      );
    }
  }


  /*3. subscribe: button.js subscribe panel event */
  import React from 'react';
  import { event } from '@/main';

  @event
  export default class extends React.Component {
    static events = {
      'panel:ok': 'onOk',
      'panel:cancel': 'onCancel'
    };

    constructor(inProps) {
      super(inProps);
      console.log('ctor');
      this.state = { items: [] };
    }

    onOk(e) {
      console.log('onOk!', e);
      this.setState({ items: e });
    }

    onCancel() {
      console.log('onCancel!');
    }

    render() {
      console.log(this.props);
      return (
        <button
          className="button"
          onClick={(e) => {
            console.log(e);
          }}>
          {this.props.children}
          {JSON.stringify(this.state.items)}
        </button>
      );
    }
  }
  ```

## documentation
- https://afeiship.github.io/react-event-manager/

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