npm.io
1.0.1 • Published 6 years ago

@feizheng/react-event-manager

Licence
MIT
Version
1.0.1
Deps
4
Size
11 kB
Vulns
0
Weekly
0

react-event-manager

Event bus meet react.

installation

npm install -S @feizheng/react-event-manager

update

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
@import "~@feizheng/react-event-manager/dist/style.scss";

// customize your styles:
$react-event-manager-options: ()
  1. import 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

Keywords