Umi: [Feature Request] 增加 dva 的 onError 等的hook配置

Created on 22 Mar 2020  ·  4Comments  ·  Source: umijs/umi

Background

[email protected] (umi-plugin-dva)的版本上是通过 在 src 下的 plugins 目录默认可以扩展 dva 的,3.x (@umijs/plugin-dva)版本却取消了(不知道取消是何考虑?):
umi-plugin-dva 源码中的 getPluginContent
function getPluginContent() { const pluginPaths = globby.sync('plugins/**/*.{js,ts}', { cwd: paths.absSrcPath, }); const ret = pluginPaths.map(path => ` app.use(require('../../${path}').default); `.trim(), );
但是在 @umijs/plugin-dva 中 Dva 的配置只有有限的几项,没法配置 onError, 导致没法托管捕获所有请求的错误或者在请求完成后处理数据时发生但未 put 更新 modal 的 state 前抛出的错误。

Proposal

在 @umijs/plugin-dva 增加配置项 onError 或者 plugins (包含 onError 或者其他hooks)(参照 umi-plugin-dva 实现难度应该不大吧);使dva的配置 设置为类似:
dva:{ immer: true, onError(err){ // ...... } }
或者
dva:{ immer: true, plugins:[ { onError(err){ // ...... } }] }

Additional context

[email protected] 到 3.x的升级的跨度还是比较大的,使用 @umijs/plugin-request 和 @umijs/plugin-layout 等插件的学习成本比较高,自己封装的部分组件自己用起来还是比较顺手的,但是就缺少 dva 的 onError 的 hook 没法使用,导致很多问题没法解决。

Most helpful comment

附议 也遇到这个问题了

All 4 comments

附议 也遇到这个问题了

+1,升级不够友好,文档少坑多。
关于这个问题,目前只能手动在应用入口处注册处理:

import { getDvaApp } from 'umi';

const app = getDvaApp();

app.use({
  onError (e) {
    e.preventDefault();
    // ...
  },
});

+1,升级不够友好,文档少坑多。
关于这个问题,目前只能手动在应用入口处注册处理:

import { getDvaApp } from 'umi';

const app = getDvaApp();

app.use({
  onError (e) {
    e.preventDefault();
    // ...
  },
});

再入口文件app.ts中调用 getDvaApp 得到的是 undefined

Was this page helpful?
0 / 5 - 0 ratings