Giter VIP home page Giter VIP logo

whirl's Introduction

whirl

Installation

yarn add krystian-mw/whirl
# or
npm i krystian-mw/whirl

Basic Usage

Function Component

import React from "react";

import { enlist } from "whirl";

interface GraphData {
  xAxis?: string[];
}

const initialStore: GraphData = {};

const Graph = ({ store }: { store: GraphData }) => {
  return <LineGraph xAxis={store.xAxis} />;
};

export default enlist(Graph, {
  storeName: "GRAPH",
  actions: [],
  initialStore,
  subscribe: [],
});

Class Component

import React from "react";

import { createStore, subscribe, dispatch, createAction } from "whirl";

const ref = React.createRef();

// Subscribe is essential to ensure it refreshes
@subscribe("TODO_LIST")
class App extends React.Component {
  componentDidMount() {
    createStore("TODO_LIST", {
      list: [],
    });

    createAction("ADD_TODO", "TODO_LIST", (store, payload) => {
      store.list.push(payload);
      // you can directly mutate the store, but in most cases you
      // will wanr to return it
      // return store;
    });

    createAction("REMOVE_TODO", "TODO_LIST", (store, payload) => {
      return { list: store.list.filter((item: string) => item !== payload) };
    });
  }

  componentDidUpdate() {}

  render() {
    return (
      <ul>
        <input ref={ref} type="text" />
        <button
          onClick={() => {
            dispatch(
              "ADD_TODO",
              "TODO_LIST",
              ref.current ? ref.current.value : Math.random()
            );
            ref.current.value = "";
          }}
        >
          Add
        </button>
        {this.props.store &&
          this.props.store.list &&
          this.props.store.list.map((item) => (
            <li key={Math.random()}>
              {item}
              <button
                onClick={() => dispatch("REMOVE_TODO", "TODO_LIST", item)}
              ></button>
            </li>
          ))}
      </ul>
    );
  }
}

export default App;

whirl's People

Contributors

krystian-mw 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.