0.0.0 • Published 5 years ago
@sanggeun.choi/react-bus v0.0.0
install
npm install @sanggeun.choi/react-busyarn add @sanggeun.choi/react-busstateBus - useStateBusSetter, useStateBusValue
import { stateBus, useStateBusSetter, useStateBusValue } from '@sanggeun.choi/react-bus';
const nameBus = stateBus('');
const StateBusExam = () => {
    return (
        <React.Fragment>
            <InputName />
            <DisplayName />
        </React.Fragment>
    );
};
const InputName = () => {
    const setName = useStateBusSetter(nameBus);
    return (
        <div>
            input :
            <input type={'text'} onChange={(e) => setName(e.target.value)} />
        </div>
    );
};
const DisplayName = () => {
    const name = useStateBusValue(nameBus);
    return <div>display : {name}</div>;
};stateBus - useStateBus, useStateBusValue
import { stateBus, useStateBus, useStateBusValue } from '@sanggeun.choi/react-bus';
const nameBus = stateBus('john');
const StateBusExam = () => {
    return (
        <React.Fragment>
            <InputName />
            <DisplayName />
        </React.Fragment>
    );
};
const InputName = () => {
    const [name, setName] = useStateBus(nameBus);
    return (
        <div>
            input :
            <input type={'text'} onChange={(e) => setName(e.target.value)} value={name} />
        </div>
    );
};
const DisplayName = () => {
    const name = useStateBusValue(nameBus);
    return <div>display : {name}</div>;
};eventBus - useEventBusCaller, useEventBusListener
import { eventBus, useEventBusCaller, useEventBusListener } from '@sanggeun.choi/react-bus';
const changeNameBus = eventBus();
const EventBusExam = () => {
    return (
        <React.Fragment>
            <InputName />
            <DisplayName />
        </React.Fragment>
    );
};
const InputName = () => {
    const changeName = useEventBusCaller(changeNameBus);
    return (
        <div>
            input :
            <input type={'text'} onChange={(e) => changeName(e.target.value)} />
        </div>
    );
};
const DisplayName = () => {
    const [name, setName] = useState('');
    useEventBusListener(
        changeNameBus,
        (_name) => {
            setName(_name);
        },
        [],
    );
    return <div>display : {name}</div>;
};memoBus - useMemoBus
import { memoBus, stateBus, useMemoBus, useStateBusSetter } from '@sanggeun.choi/react-bus';
const numberBus = stateBus(0);
const nameBus = stateBus('');
const infoBus = memoBus((number, name) => `${number} - ${name}`, [numberBus, nameBus]);
const MemoBusExam = () => {
    return (
        <React.Fragment>
            <InputNumber />
            <InputName />
            <DisplayInfo />
        </React.Fragment>
    );
};
const InputNumber = () => {
    const setNumber = useStateBusSetter(numberBus);
    return (
        <div>
            input number :
            <input type={'number'} onChange={(e) => setNumber(e.target.value)} />
        </div>
    );
};
const InputName = () => {
    const setName = useStateBusSetter(nameBus);
    return (
        <div>
            input name :
            <input type={'text'} onChange={(e) => setName(e.target.value)} />
        </div>
    );
};
const DisplayInfo = () => {
    const info = useMemoBus(infoBus);
    return <div>display : {info}</div>;
};memoBus - useMemoBus (async & await)
import axios from 'axios';
import { memoBus, stateBus, useMemoBus, useStateBusSetter } from '@sanggeun.choi/react-bus';
const numberBus = stateBus(0);
const infoBus = memoBus(
    async (number) => {
        if (number === undefined || number <= 0) {
            return '';
        }
        const response = await axios.get(`https://api.example.com/todos/${number}`);
        return response.data.title;
    },
    [numberBus],
);
const MemoBusExam = () => {
    return (
        <React.Fragment>
            <InputNumber />
            <DisplayInfo />
        </React.Fragment>
    );
};
const InputNumber = () => {
    const setNumber = useStateBusSetter(numberBus);
    return (
        <div>
            input number :
            <input type={'number'} onChange={(e) => setNumber(e.target.value)} />
        </div>
    );
};
const DisplayInfo = () => {
    const info = useMemoBus(infoBus);
    return <div>display : {info}</div>;
};