umi 使用defineApp造成initialState初始化数据丢失问题

ibps3vxo  于 2023-03-19  发布在  其他
关注(0)|答案(4)|浏览(675)

What happens?

app.ts 使用 defineApp({}) 声明了 getInitialState
config.ts 也声明了 initialState:{}

开启项目后, .umi/plugin-initialState/@@initialState.ts 没有初始化数据及设置方法,只剩

export default () => ({ loading: false, refresh: () => {} })

查了下源码,使用 es-module-lexer 解析出的 exportsdefault ,对应 api.appData.appJS.getInitialState 没有获取到,造成了 @@initialState.ts 没有数据

因为官网关于defineApp的介绍比较少,是在Beta阶段还是?

Mini Showcase Repository(REQUIRED)

一个初始化的antd-pro项目并将app.ts改为defineApp()方法,即可重现问题

项目地址

Context

  • Umi Version:4.0.24
  • Node Version:16.18.0
  • Platform:Windows 11
6fe3ivhb

6fe3ivhb1#

由于缺乏足够的信息,我们暂时关闭了该 Issue。请修改(不要回复) Issue 提供 最小重现 以重新开启。谢谢。

2nc8po8w

2nc8po8w2#

该问题可以拆解成以下 4 个子问题
  1. defineApp 和 独立导出 一并使用时,只使用了 defineApp ,独立导出不会生效。
  2. max 项目中, app.tsdefineApp 有循环依赖关系,会导致 defineApp 无法使用。
  3. 目前 getInitialState 的有无判断是通过 es-module-lexer 实现的,但使用 defineApp 时,无法识别到是否使用了 getInitialState
  4. 同问题 3 ,qiankun 插件也有 一处 使用了 appJS.exports ,当使用 defineApp 时,不会生效。

目前 问题 1 和 2 在 #9708 可以解决。

jk9hmnmh

jk9hmnmh3#

该问题可以拆解成以下 4 个子问题
  1. defineApp 和 独立导出 一并使用时,只使用了 defineApp ,独立导出不会生效。
  2. max 项目中, app.tsdefineApp 有循环依赖关系,会导致 defineApp 无法使用。
  3. 目前 getInitialState 的有无判断是通过 es-module-lexer 实现的,但使用 defineApp 时,无法识别到是否使用了 getInitialState
  4. 同问题 3 ,qiankun 插件也有 一处 使用了 appJS.exports ,当使用 defineApp 时,不会生效。

目前 问题 1 和 2 在 #9708 可以解决。

问题3我尝试像获取config一样走了遍register,倒是拿到了里面的数据,不知道这样好不好

4urapxun

4urapxun4#

该问题目前的解决想法:在运行时进行校验,防止用户出现错误。

相关问题