当前位置: 首页 > article >正文

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}</>;
};


http://www.kler.cn/a/156775.html

相关文章:

  • 深入理解接口测试:实用指南与最佳实践5.0(三)
  • LeetCode【0031】下一个排列
  • 前端知识点---Javascript的对象(Javascript)
  • vue3项目中内嵌vuepress工程两种实现方式
  • nginx部署H5端程序与PC端进行区分及代理多个项目及H5内页面刷新出现404问题。
  • 【网络工程】计算机硬件概述
  • 图帕斯TruPulse激光测距仪测高仪维修TP360B TP200
  • 陪玩行业引流不再成难题?“他”到底是怎么做到的
  • 认识Docker
  • Jvm常见问题
  • AI聊天 AI绘画 AI视频 AI制作PPT
  • [Unity数据管理]自定义菜单创建Unity内部数据表(ScriptableObject)
  • 鸿蒙学习之TypeScript 语法理解笔记
  • LightDB to_char 三入参函数支持
  • 吉祥物虚拟人IP:如何持续为品牌年轻化营销赋能
  • 面试篇:算法(二:二叉树)
  • 信而泰IPSec测试方法
  • 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值
  • vs查找与替换功能【在文件中查找】不显示任何结果
  • 【objectarx.net】加载线型文件
  • golang 解决ZWNBSP 空字符问题
  • 【Docker】Swarm的ingress网络
  • 绿色建筑革新,气膜球馆成为城市锻炼新热点
  • Python 流程控制
  • HTML5+CSS3+Vue小实例:浪漫的心形文字动画特效
  • FFmpeg在Centos服务器上离线安装(包含所需依赖)并实现拉取rtsp流与推送至rtmp服务器