join-react-context
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

join-react-context

join multiple react context into one.

works perfectly with typescript.

usage

import * as React from 'react';
import {
    Providers,
    joinContext,
    joinProvider,
    joinConsumer,
} from 'join-react-context';
 
const contextA = React.createContext('context a');
const contextB = React.createContext('context b');
 
{ // providers array style
    <Providers providers={[
        <contextA.Provider value='a'/>,
        <contextB.Provider value='b'/>,
    ]}>
        {children}
    </Providers>
    // is same as...
    <contextA.Provider value='a'>
        <contextB.Provider value='b'>
            {children}
        </contextB.Provider>
    </contextA.Provider>
}
{ // providers fragment style
    <Providers providers={<>
        <contextA.Provider value='a'/>
        <contextB.Provider value='b'/>
    </>}>
        {children}
    </Providers>
}
{ // join tuple style
    type Contexts = [ typeof contextA, typeof contextB ];
    const { Provider, Consumer } = joinContext<Contexts>([ contextA, contextB ]);
 
    const App = () => (
        <Provider value={[ 'a', 'b' ]}>
            <Component/>
        </Provider>
    );
 
    const Component = () => (
        <Consumer>
            { ([ a, b ]) => <div>{ a }{ b }</div> }
        </Consumer>
    );
}
{ // join object style
    const { Provider, Consumer } = joinContext({ a: contextA, b: contextB });
 
    const App = () => (
        <Provider value={{ a: 'a', b: 'b' }}>
            <Component/>
        </Provider>
    );
 
    const Component = () => (
        <Consumer>
            { ({ a, b }) => <div>{ a }{ b }</div> }
        </Consumer>
    );
}
{ // join mixed style (vice versa)
    type Contexts = [ typeof contextA, typeof contextB ];
    const Provider = joinProvider<Contexts>([ contextA, contextB ]);
    const Consumer = joinConsumer({ a: contextA, b: contextB });
 
    const App = () => (
        <Provider value={[ 'a', 'b' ]}>
            <Component/>
        </Provider>
    );
 
    const Component = () => (
        <Consumer>
            { ({ a, b }) => <div>{ a }{ b }</div> }
        </Consumer>
    );
}

Dependencies (0)

    Dev Dependencies (3)

    Package Sidebar

    Install

    npm i join-react-context

    Weekly Downloads

    188

    Version

    1.1.0

    License

    Zlib

    Unpacked Size

    12.3 kB

    Total Files

    8

    Last publish

    Collaborators

    • disjukr