umi model 注册

转自:https://www.cnblogs.com/thinkingthigh/p/11606539.html

 

model 分两类,一是全局 model,二是页面 model。全局 model 存于 /src/models/ 目录,所有页面都可引用;页面 model 不能被其他页面所引用。

规则如下:

  • src/models/**/*.js 为 global model
  • src/pages/**/models/**/*.js 为 page model
  • global model 全量载入,page model 在 production 时按需载入,在 development 时全量载入
  • page model 为 page js 所在路径下 models/**/*.js 的文件
  • page model 会向上查找,比如 page js 为 pages/a/b.js,他的 page model 为 pages/a/b/models/**/*.js + pages/a/models/**/*.js,依次类推
  • 约定 model.js 为单文件 model,解决只有一个 model 时不需要建 models 目录的问题,有 model.js 则不去找 models/**/*.js

举个例子,

+ src
  + models
    - g.js
  + pages
    + a
      + models
        - a.js
        - b.js
        + ss
          - s.js
      - page.js
    + c
      - model.js
      + d
        + models
          - d.js
        - page.js
      - page.js

如上目录:

  • global model 为 src/models/g.js
  • /a 的 page model 为 src/pages/a/models/{a,b,ss/s}.js
  • /c 的 page model 为 src/pages/c/model.js
  • /c/d 的 page model 为 src/pages/c/model.js, src/pages/c/d/models/d.js

#配置及插件

之前在 src/dva.js 下进行配置的方式已 deprecated,下个大版本会移除支持。

在 src 目录下新建 app.js,内容如下:

export const dva = {
  config: {
    onError(e) {
      e.preventDefault();
      console.error(e.message);
    },
  },
  plugins: [
    require('dva-logger')(),
  ],
};

#FAQ

#url 变化了,但页面组件不刷新,是什么原因?

layouts/index.js 里如果用了 connect 传数据,需要用 umi/withRouter 高阶一下。

import withRouter from 'umi/withRouter';

export default withRouter(connect(mapStateToProps)(LayoutComponent));

#如何访问到 store 或 dispatch 方法?

window.g_app._store
window.g_app._store.dispatch

#如何禁用包括 component 和 models 的按需加载?

在 .umirc.js 里配置:

export default {
  plugins: [
    [
      'umi-plugin-react',
      {
        dva: {
          dynamicImport: undefined // 配置在dva里
        },
        dynamicImport: undefined   // 或者直接写在react插件的根配置,写在这里也会被继承到上面的dva配置里
      }
    ],
  ],
};

#全局 layout 使用 connect 后路由切换后没有刷新?

需用 withRouter 包一下导出的 react 组件,注意顺序。

import withRouter from 'umi/withRouter';
export default withRouter(connect()(Layout));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 的基本方法,希望能帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值