Light and fast 🚀 state management tool using proxy.
Dob is a tool for monitoring object changes. Using Proxy. Online Docs.
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.
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 notnew UserStore()
, it’s terrible for later maintenance.
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")
);
Talk to us about dob using DingDing.
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;
}
const obj = observable({ a: 1 });
// good
obj.a = 5;
// bad
let { a } = obj;
a = 5;