Git Product home page Git Product logo

unstated's Introduction

Unstated

State so simple, it goes without saying

Installation

yarn add unstated

Fork changes

This fork of Unstated contains a few changes to add Immer. With Immer we can make the state in our containers immutable. To support Immer setState was changed to only accept a immer producer.

Example

// @flow
import React from 'react';
import { render } from 'react-dom';
import { Provider, Subscribe, Container } from 'unstated';

type CounterState = {
  count: number
};

class CounterContainer extends Container<CounterState> {
  // this.freeze is used to make the state immutable from the very beginning
  state = this.freeze({
    count: 0
  });

  increment() {
    // old method
    // this.setState({ count: this.state.count + 1 });

    // new method with a producer
    this.setState(draft => {
      draft.count += 1;
    });
  }

  decrement() {
    // old method
    // this.setState({ count: this.state.count - 1 });

    // new method with a producer
    this.setState(draft => {
      draft.count -= 1;
    });
  }
}

function Counter() {
  return (
    <Subscribe to={[CounterContainer]}>
      {counter => (
        <div>
          <button onClick={() => counter.decrement()}>-</button>
          <span>{counter.state.count}</span>
          <button onClick={() => counter.increment()}>+</button>
        </div>
      )}
    </Subscribe>
  );
}

render(
  <Provider>
    <Counter />
  </Provider>,
  document.getElementById('root')
);

For more examples, see the example/ directory.

unstated's People

Contributors

jamiebuilds avatar andrenanninga avatar andarist avatar sindresorhus avatar iljadaderko avatar yordis avatar pyrolistical avatar jxom avatar vinspee avatar sudhakar avatar iamsoorena avatar swanoo avatar ryami333 avatar mjsisley avatar wkovacs64 avatar gsong avatar deini avatar abergs avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.