react+mobx使用教程

Mobx

mobx

热更新 hot module 问题

用了 observer 就必须加上 hot, 不然界面不会自动刷新

import { observer } from "mobx-react";
import { hot } from "react-hot-loader";
@observer
@hot(module)
export default class UploadPage extends Component<Props, State> {}

demoStore.ts

import React, { Component } from "react";
import { observable, computed, observe, action, transaction, toJS } from "mobx";

class DemoStore {
  @observable name: string = "无名";
  @computed get fullName(): string {
    return "fullName:" + this.name;
  }

  /** 修改名称 */
  @action
  changeName = (name: string) => {
    this.name = name;
  };
}
const demoStore = new DemoStore();
export default demoStore;

Demo.tsx

import React, { Component } from "react";
import demoStore from "./demoStore";

interface Props {}
interface State {}
@observer
export default class Demo extends Component<Props, State> {
  readonly state: State = {};
  @observable pageName: string = "demo";

  changePageName = (pageName: string) => {
    this.pageName = pageName;
  };
  render() {
    return (
      <div>
        <div>用户名: {demoStore.name}</div>
        <div> {demoStore.fullName}</div>
        <div onClick={() => demoStore.changeName("赵日天")}>修改</div>

        <div> {this.pageName}</div>
        <div onClick={() => this.changePageName("demoPage")}>修改</div>
      </div>
    );
  }
}

缓存

import React, { Component } from "react";
import { observable, computed, observe, action, transaction, toJS } from "mobx";
import { create, persist } from "mobx-persist";

class UserStore {
  @persist @observable token = "";
  @persist("object") @observable data = { name: "嘿嘿" };
}
const userStore = new UserStore();
export default userStore;

const hydrate = create();
hydrate("userStore", userStore).then(() => {
  console.log("store同步成功");
});

监听

import { reaction } from "mobx";
import demoStore from "./demoStore";

// 监听
const myReaction = reaction(
  () => demoStore.name,
  name => {
    console.log("reaction change:", name);
  }
);
// 取消监听
myReaction && myReaction();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容