mobx在hooks中使用

創(chuàng)建倉庫還是和之前一樣,在 store/appStore.js 中

import { observable } from "mobx";

class AppStore {
  @observable a = "1154545";
}
export default AppStore;

在 stroe/index.js 中

import React from "react";
import appStore from "./AppStore";

// 這里我們注意需要使用createContext
const StoresContext = React.createContext({
  appStore,
});

export default StoresContext;

在 hooks/index.js 中我們新增 useStores 自定義 hooks

import React from "react";
import StoresContext from "../store/index";

export const useStores = () => React.useContext(StoresContext);
  1. 使用方式一
    組件中,比如 App 組件 App.jsx
import React from "react";
import { useStores } from "./hooks/index";
import { useObserver } from "mobx-react-lite";
import App2 from "./components/App2";
import "./App.css";
import Ob from "./components/Ob";

// 方式一
// 注意使用mobx-react-lite的 useObserver
// 和mobx-react中的observer基本沒有區(qū)別

function App() {
  const { appStore } = useStores(); // 獲取store
  console.log("App");
  return useObserver(() => (
    <div
      className="App"
      // onClick={() => appStore.add()}
    >
      {appStore.a}
      <App2 />
      <Ob />
    </div>
  ));
}

export default App;
  1. 使用方式二
    在 App2 中舉例
import React, { memo } from "react";
import { observer, useObserver } from "mobx-react";
import { useStores } from "../hooks";

export default observer(function App2() {
  const { appStore } = useStores();
  console.log("app2");
  return <div onClick={() => appStore.add()}>{appStore.a}</div>;
});
  1. 使用方式三
    在 Ob 組件中舉例
import React, { memo } from "react";
import { Observer } from "mobx-react";
import { useStores } from "../hooks";

function Ob() {
  const { appStore } = useStores();
  console.log("Ob");
  return (
    <div onClick={() => appStore.add()}>
      <Observer>{() => appStore.a}</Observer>
    </div>
  );
}

export default memo(Ob);

以上就是最近在 hooks 中寫 mobx 比較爽的方式

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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