dob

Light and fast ? state management tool using proxy.

Github星跟踪图

Examples

There are some demo on fiddle. Here's the simplest:

import { observable, observe } from "dob";

const obj = observable({ a: 1 });

observe(() => {
  console.log("obj.a has changed to", obj.a);
}); // <· obj.a has changed to 1

obj.a = 2; // <· obj.a has changed to 2

You can enjoy the benefits of proxy, for example obj.a = { b: 5 } is effective.

Use in react component

import { Action, observable, combineStores, inject } from "dob";
import { Connect } from "dob-react";

@observable
export class UserStore {
  name = "bob";
}

export class UserAction {
  @inject(UserStore) userStore: UserStore;

  @Action
  setName() {
    this.userStore.name = "lucy";
  }
}

@Connect(
  combineStores({
    UserStore,
    UserAction
  })
)
class App extends React.Component {
  render() {
    return (
      <span onClick={this.props.UserAction.setName}>
        {this.props.UserStore.name}
      </span>
    );
  }
}

Use inject to pick stores in action, do not new UserStore(), it's terrible for later maintenance.

Use in react project

import { Action, observable, combineStores, inject } from "dob";
import { Provider, Connect } from "dob-react";

@observable
export class UserStore {
  name = "bob";
}

export class UserAction {
  @inject(UserStore) userStore: UserStore;

  @Action
  setName() {
    this.userStore.name = "lucy";
  }
}

@Connect
class App extends React.Component {
  render() {
    return (
      <span onClick={this.props.UserAction.setName}>
        {this.props.UserStore.name}
      </span>
    );
  }
}

ReactDOM.render(
  <Provider
    {...combineStores({
      UserStore,
      UserAction
    })}
  >
    <App />
  </Provider>,
  document.getElementById("react-dom")
);

Project Examples

Ecosystem

  • dob-react - Connect dob to react! Here is a basic demo, and here is a demo with fractal. Quick start.
  • dob-react-devtools - Devtools for dob-react, with action and ui two way binding.
  • dob-redux - You can use both dob and Redux by using it! Enjoy the type and convenience of dob, and the ecology of Redux.

Communication

Talk to us about dob using DingDing.

Note

Dependency injection does not support circular references

Do not allow circular dependencies between store and action, It's impossible to do like this:

class A {
  @inject(B) b;
}
class B {
  @inject(A) a;
}

Do not deconstruct to the last level on dynamic object

const obj = observable({ a: 1 });

// good
obj.a = 5;
// bad
let { a } = obj;
a = 5;

Inspired

主要指标

概览
名称与所有者dobjs/dob
主编程语言TypeScript
编程语言TypeScript (语言数: 1)
平台
许可证MIT License
所有者活动
创建于2017-02-27 13:52:31
推送于2018-12-17 15:26:29
最后一次提交2018-12-17 23:26:12
发布数0
用户参与
星数731
关注者数18
派生数35
提交数223
已启用问题?
问题数10
打开的问题数2
拉请求数1
打开的拉请求数0
关闭的拉请求数0
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?