react-flat-providers

React component to organize and flatten providers.

Usage no npm install needed!

<script type="module">
  import reactFlatProviders from 'https://cdn.skypack.dev/react-flat-providers';
</script>

README

react-flat-providers

React component to organize and flatten providers.

NPM JavaScript Style Guide

Usage

A working example can be found following the link bellow:

https://stackblitz.com/edit/react-flat-providers-example

Install

npm install --save react-flat-providers

Why

/**
 * Its very common to have Spaceships like this in your React project.
 * A common pattern is to break these big Spaceships into smaller ones.
 * But I saw that this increases the amount of code and complexity even more.
 */

<NumberProvider>
  <BooleanProvider>
    <StringProvider>
      ...
      <ContextConsumingComponent />
      ...
    </StringProvider>
  </BooleanProvider>
</NumberProvider>

Solution

/**
 * Please check /example/src/index.tsx and imported providers
 * to see how to use FlatProviders more detailed.
 * */

<FlatProviders
  providers={[
    // Can pass directly as FunctionComponent
    NumberProvider,
    // Can pass as Pair of Component and Object with parameters
    [BooleanProvider, { initialValue: true }],
    // Even as Pair of Context.Provider and Object with key 'value'
    // Compatible with Redux-Toolkit with Object with key 'store'
    [StringContext.Provider, { value: 'Hello world!' }],
  ]}
>
  <App />
</FlatProviders>
// A Provider can be anything that exposes a Context
type Provider = FunctionComponent<any> | ComponentClass<any> | typeof Component;

// Passed Providers must be an Array that have as values:
// Provider or an Array with Provider and its properties as Object
type Providers = Array<Provider | [Provider, Record<string, unknown>]>;

License

MIT © sincovschi