关于UMI中 useModel的使用(踩坑记录)

最近用React + UMI +qiankun的框架撸了一个后台管理系统,主应用使用的qiankun做的微前端,子运用使用的是UMI搭建的React 项目,涉及到主应用与子运用的通信问题。
1.主应用用的qiankun中的registerMicroApps进行的传值,代码如下:

registerMicroApps([
  {
    name: 'react app', // app name registered
    entry: '//localhost:8080',
    container: '#yourContainer',
    activeRule: '/yourActiveRule',
     props:{
      userId:'xxx'
     }
  },

2.子应用根据UMI提供的API:

import { useModel } from 'umi';

function MyPage() {
  const masterProps = useModel('@@qiankunStateFromMaster');
  return <div>{JSON.stringify(masterProps)}</div>;
}

所以按照官网的API的写法,我一开始是在项目中这样获取并赋值的

import { useModel } from 'umi'
const College = () => {
  const [userId, setUserId] = useState<React.ReactNode>(false)
 const masterProps = useModel('@@qiankunStateFromMaster')
 if (masterProps && masterProps.userId {
   setUserId(masterProps.userId)
 }
}

部署子应用后,一直报错

经过分析发现,原来是不能这么写,赋值的时候得放到hooks钩子函数中:

import {  useEffect } from 'react'
import { useModel } from 'umi'
const College = () => {
  const [userId, setUserId] = useState<React.ReactNode>(false)
  const masterProps = useModel('@@qiankunStateFromMaster')
useEffect(() => {
 if (masterProps && masterProps.userId {
   setUserId(masterProps.userId)
 }
},[])
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
umi 是一个基于 React 的企业级前端应用开发框架,可以帮助开发者快速构建高质量的单页应用或多页应用。使用 umi 时,可以通过 useModel使用 umi 的模型。 useModelumi 用于访问和管理模型的 Hook,可以在函数组件使用。在使用 useModel 之前,需要先在 model 文件夹定义模型。 具体使用方法如下: 1. 在函数组件引入 useModel ``` import { useModel } from 'umi'; ``` 2. 使用 useModel 获取模型对象 ``` const model = useModel('modelName'); ``` 其modelName 是在 model 文件夹定义的模型名称。 3. 在组件使用模型 ``` function MyComponent() { const model = useModel('modelName'); const { data, error, loading } = model.someEffect(); // ... } ``` 在组件,可以通过模型对象调用模型的方法,例如一些异步操作。 注意:在使用 useModel 之前,需要先在 config/config.ts 文件配置 model 属性,指定 model 文件夹的路径。 ``` export default { // ... // 配置 model 文件夹的路径 // 即 model 文件夹所在的目录 // 默认为 src/models // 如果在根目录下创建了 models 目录,则需要手动指定路径为 ./models // 如果没有使用 model,则可以省略该属性 // 例如:model: {}, model: { // 指定 model 文件夹的路径 // 如果 models 目录在根目录下,则为 './models' // 如果 models 目录在 src 目录下,则为 './src/models' // 如果没有使用 model,则可以省略该属性 // 例如:'./models', dir: 'model', }, // ... }; ``` 以上就是使用 umi useModel Hook 的基本方法,希望能帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值