umiJs 4.x useModel使用报错问题解决

本文介绍了在umi3.x和4.x版本中useModelhook的使用方法变化,重点讲解了从umi3.x的约定式引入到umi4.x的运行时配置和模型注册。详细说明了如何在新项目中自动启用数据流功能以及手动添加数据流插件的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在umi 3.x框架中,我们使用useModel相对比较方便:

1、src文件夹下创建models文件夹,创建全局model ts文件:

数据流管理插件采用约定式目录结构,我们约定可以在 src/modelssrc/pages/xxxx/models/目录中,和 src/pages/xxxx/model.{js,jsx,ts,tsx} 文件引入 Model 文件。 Model 文件允许使用 .(tsx|ts|jsx|js) 四种后缀格式。

2、在需要使用的文件中 引入useModel即可使用。

import { useModel } from "umi";

export default ()=> {
    const { XXX } = useModel('xxModel') ;
}

更新到umi 4.x后,useModel的使用方式有了些许变化,变化主要在于引入注册机制。

umi 4.x 强调运行时配置的概念,就是说需要什么插件,你就自己引入注册使用,在很大程度上避免了框架过于臃肿的麻烦,加快了打包运行速度

使用方式主要有2种:

1、在创建umijs项目时,选择自带数据流功能的 @umijs/max 项目

在使用 create-umi 选择 Ant Design Pro 模板,就能使用 @umijs/max 来创建项目了。

npx create-umi@latest 
? Pick Umi App Template › - Use arrow-keys. Return to submit. 
  Simple App 
❯ Ant Design Pro 
  Vue Simple App

新建的项目默认安装以下插件, 可以按需开启:

同时需要在项目中注册使用model:

// .umirc.ts 或者 config.ts 中

export default {
  model: {}
};

2、手动开启数据流功能的插件使用该功能

这种方法是建立在创建的umi项目中没有包含数据流功能插件的情况下

首先安装 数据流功能插件:

npm i -D @umijs/plugins

注册使用model:

// .umirc.ts 
export default { 
   plugins: [ 
      '@umijs/plugins/dist/initial-state', 
      '@umijs/plugins/dist/model', 
   ], 
   initialState: {}, 
   model: {}, 
};

通过以上两种方法 即可在umijs 4.x 中正常使用 useModel hook。

Umi.js 4.x(通常指umi框架)提供了一种模块化的前端架构,其中包括动态路由管理和组件间通信等功能。如果你想要在UMI应用中获取当前页面的props(属性),你可以通过导航守卫(navigation guards)或者全局状态管理工具(如Redux、Dva)来实现。 **通过导航守卫获取props**: 在`umi-router`中,你可以创建一个自定义的导航钩子(例如`onRouteUpdate`或`async routes`配置中的函数),在这个钩子里,你可以访问到即将跳转的路径以及相关的查询参数,也就是props的一部分。 ```javascript // router.config.js 或者其他导航配置文件 import { onRouteUpdate } from 'umi'; export default { // ... async routes() { return [ { path: '/your-path', component: YourComponent, onRouteUpdate: ({ match }) => { const props = match.params || match.query; // 获取当前页面的props console.log(props); }, }, ]; }, // ... }; ``` **通过状态管理获取props**: 如果props需要在整个应用中共享,可以使用状态管理库(如Redux)将它们存储在一个全局store中,然后在需要的地方通过`useSelector`或者`connect`等API获取。 ```javascript // store.js 或者某个reducer文件 const initialState = { currentProps: {}, }; function reducer(state = initialState, action) { // ... } const mapStateToProps = (state) => ({ currentPageProps: state.currentPageProps, }); // 组件中使用 import { useSelector } from 'umi-redux-utils'; function YourComponent() { const currentPageProps = useSelector(mapStateToProps); // 使用currentPageProps } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值