reducible-node
TypeScript icon, indicating that this package has built-in type declarations

0.1.2 • Public • Published

Reducible Node

npm Build Status

This small library is inspired by redux and is as small.

This is mostly here to inrtroduce a new concept called reducible. Redux encourages you to have separate files for you reducers and your components (react, etc...). Yet Graph-QL encourages you to have your component and the data it needs in the same file.

This new concept tries to have the best of both worlds. With a trade-off of cource. You'll lose hydration/dehydration.

A reducible is an object/class/module that has data and a reduce method:

export type Reducible<T extends Reducible<any>> = T & {
  reduce(action: Action<any>): Reducible<T>;
};

As an example take the following class:

class MyState extends Reducible<MyState> {
    public readonly value: string;

    public constructor(value: string) {
        this.value = value;
    }

    public reduce(action: Action<any>): this {
        if (action.type === 'MY_ACTION') {
            return new MyState(action.payload);
        }

        return this;
    }
}

You can then use and build a node for your component:

import * as React from 'react';
import { buildNode } from 'reducible-node';

const node = buildNode(() => ({
  myState: new MyState(),
}));

type Props = { node: typeof node['state'] };

class MyComponent extends React.Component<Props> {
  public render() {
    const { node: { myState } } = this.props;

    return <div>{myState.value}</div>;
  }
}

// Later on how to patch node with MyComponent

Installation

You can install this package with the following command:

npm install reducible-node

Typings

The typescript type definitions are also available and are installed with npm.

License

This project is licensed under the MIT license.

Dependencies (0)

    Dev Dependencies (11)

    Package Sidebar

    Install

    npm i reducible-node

    Weekly Downloads

    1

    Version

    0.1.2

    License

    MIT

    Last publish

    Collaborators

    • alitaheri