@iore8655/react-bus

@iore8655/react-bus is a global/local state management by pub/sub


Keywords
react, state, hooks, react-bus
License
MIT
Install
npm install @iore8655/react-bus@0.2.7

Documentation

@iore8655/react-bus

  • @iore8655/react-bus is a global/local state management by pub/sub
  • render only subscribers

Install

npm install @iore8655/react-bus
yarn add @iore8655/react-bus

Basic Example

import React from 'react';
import {
    createEventBus,
    createStateBus,
    useEventBusSelector,
    useStateBusSelector,
} from '@iore8655/react-bus';

const stateBus = createStateBus({
    name: 'john',
    number: 0,
});

const eventBus = createEventBus();

const DisplayAll = () => {
    const { name, number } = useStateBusSelector(stateBus);

    return (
        <React.Fragment>
            <div>name : {name}</div>
            <div>number : {number}</div>
        </React.Fragment>
    );
};

const DisplayName = () => {
    const name = useStateBusSelector(stateBus, (state) => state.name);

    useEventBusSelector(eventBus, (message) => {
        console.log(message);
    });

    return (
        <React.Fragment>
            <div>name : {name}</div>
        </React.Fragment>
    );
};

const DisplayNumber = () => {
    const number = useStateBusSelector(stateBus, (state) => state.number);

    useEventBusSelector(eventBus, (message) => {
        console.log(message);
    });

    return (
        <React.Fragment>
            <div>number : {number}</div>
        </React.Fragment>
    );
};

const Controller = () => {
    return (
        <div>
            <button onClick={() => stateBus.dispatch((state) => (state.number += 1))}>
                increase
            </button>
            <button onClick={() => stateBus.dispatch({ number: stateBus.getState().number - 1 })}>
                decrease
            </button>
            <button onClick={() => console.log(stateBus.getState())}>getState()</button>
            <button onClick={() => stateBus.reset()}>reset</button>
            <button onClick={() => stateBus.restore({ name: 'tom', number: 1 })}>restore</button>
            <button onClick={() => eventBus.dispatch('Hello World')}>event</button>
        </div>
    );
};

const App = () => {
    return (
        <React.Fragment>
            <DisplayAll />
            <DisplayName />
            <DisplayNumber />
            <Controller />
        </React.Fragment>
    );
};

export default App;