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同步成功");
});

監(jiān)聽

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

// 監(jiān)聽
const myReaction = reaction(
  () => demoStore.name,
  name => {
    console.log("reaction change:", name);
  }
);
// 取消監(jiān)聽
myReaction && myReaction();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容