React自定义Hook之useModel hook

一、概述

        useModel hook是React Hook中一个自定义的钩子函数,用于管理应用程序中的状态和逻辑。它主要用于组件之间的状态共享和通信。

        useModel hook通常包含以下几个步骤:        

            1.创建模型:定义需要共享的状态和相关的方法,可以使用React的useState、useEffect等其他钩子。

           2.使用useModel hook:在需要使用该模型的组件中,使用useModel hook来获取模型的实例。

          3.使用模型的状态和方法:通过模型的实例,可以在组件中访问和修改模型的状态,并调用模型中定义的方法。

二、使用样例

1.创建Model

文件路径: src/models/counterModel.ts

// src/models/counterModel.ts
import { useState, useCallback } from 'react';

export default function Page() {
  // 计数器状态
  const [counter, setCounter] = useState(0);

  const increment = useCallback(() => setCounter((c) => c + 1), []);
  const decrement = useCallback(() => setCounter((c) => c - 1), []);

  return { counter, increment, decrement };
};

2.Model使用

// src/components/CounterActions/index.tsx
import { useModel } from 'umi';

export default function Page() {
  const { add, minus } = useModel('counterModel', (model) => ({
    add: model.increment,
    minus: model.decrement,
  }));

  return (
    <div>
      <button onClick={add}>add by 1</button>
      <button onClick={minus}>minus by 1</button>
    </div>
  );
};

三、其它扩展

1.全局初始状态

@umi/max 内置了全局初始状态管理插件,允许您快速构建并在组件内获取 Umi 项目全局的初始状态。

全局初始状态是一种特殊的 Model。

全局初始状态在整个 Umi 项目的最开始创建。编写 src/app.ts 的导出方法 getInitialState(),其返回值将成为全局初始状态。例如:

app.ts

// src/app.ts
import { fetchInitialData } from '@/services/initial';

export async function getInitialState() {
  const initialData = await fetchInitialData();
  return initialData;
}
xx.ts 业务中获取初始状态
import { useModel } from 'umi';

export default function Page() {
  const { initialState, loading, error, refresh, setInitialState } =
    useModel('@@initialState');
  return <>{initialState}</>;
};

相关推荐

  1. React定义HookuseModel hook

    2023-12-07 01:58:05       69 阅读
  2. React】如何定义 Hooks

    2023-12-07 01:58:05       22 阅读
  3. 深入React Hoooks:从基础到定义 Hooks

    2023-12-07 01:58:05       24 阅读
  4. # 14 React 定义Hook详解

    2023-12-07 01:58:05       41 阅读
  5. React@16.x(24)定义HOOK

    2023-12-07 01:58:05       34 阅读
  6. 如何写一个react定义hooks

    2023-12-07 01:58:05       43 阅读
  7. 如何在React中创建定义Hooks

    2023-12-07 01:58:05       33 阅读
  8. React 中使用定义 Hooks 封装 Service 逻辑

    2023-12-07 01:58:05       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 01:58:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 01:58:05       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 01:58:05       82 阅读
  4. Python语言-面向对象

    2023-12-07 01:58:05       91 阅读

热门阅读

  1. C++EasyX之跟随鼠标移动的小球

    2023-12-07 01:58:05       73 阅读
  2. Vue2 模版编译及生命周期钩子 总结归纳

    2023-12-07 01:58:05       61 阅读
  3. DELETE 请求,如何通过ajax进行发送

    2023-12-07 01:58:05       63 阅读
  4. K8S 容器和声明式资源

    2023-12-07 01:58:05       59 阅读
  5. 面试遇到的一些问题(二)

    2023-12-07 01:58:05       63 阅读
  6. 使用Plotly同时可视化表格和图表(Python)

    2023-12-07 01:58:05       55 阅读
  7. 1. 小游戏(贪心)

    2023-12-07 01:58:05       64 阅读
  8. C++ 共享内存ShellCode跨进程传输

    2023-12-07 01:58:05       46 阅读
  9. [node]Node.js多线程

    2023-12-07 01:58:05       59 阅读
  10. git的使用:基础配置和命令行

    2023-12-07 01:58:05       61 阅读
  11. 【数据仓库】-- 数据库设计的三个范式

    2023-12-07 01:58:05       64 阅读