Umi: 为什么src/pages/components/RegisterAreaSelect/model.js无法使用

Created on 23 May 2019  ·  7Comments  ·  Source: umijs/umi

我在 创建了 这个文件 src/pages/components/RegisterAreaSelect/model.js
在 src/pages/components/RegisterAreaSelect/index.js 使用不了

Need Reproduce

Most helpful comment

应该是整个 components 文件夹被排除了,没作为页面时;pages文件夹下的model会在进入页面时注册models
image

试试在connect 前手动注册model (未试过)

window.g_app.model({ namespace: 'registerAreaSelect', ...(require('src/pages/components/RegisterAreaSelect/model.js').default) });

require 应该换成 import,所以应该是这样的

import model form '@/components/RegisterAreaSelect/model.js';
window.g_app.model({ namespace: 'registerAreaSelect', ...model  });

All 7 comments

给最小可复现例子。

src/pages/components/RegisterAreaSelect/model.js
内容

export default {
  namespace: 'registerAreaSelect',
  state: {
    areaData: 123, // 注册区域数据
    parkData: 456, // 注册园区数据
  },
  effects: {
    *query({ payload }, { call, put }) {},
  },
  reducers: {
    loadData(state, { payload }) {
      return {
        ...state,
        ...payload,
      }
    },
  },
}

src/pages/components/RegisterAreaSelect/index.js
内容

import React from 'react'
import { connect } from 'dva'

@connect(({ registerAreaSelect, loading }) => ({
  areaData: registerAreaSelect.areaData,
}))
class RegisterAreaSelect extends React.PureComponent {

  render() {
     const { areaData } = this.props
     return <div>{areaData}</div>
  }
}

export default RegisterAreaSelect

报错信息
image
@sorrycc

我也遇到类似的问题了,求解~

给最小可复现仓库。

应该是整个 components 文件夹被排除了,没作为页面时;pages文件夹下的model会在进入页面时注册models
image

试试在connect 前手动注册model (未试过)

window.g_app.model({ namespace: 'registerAreaSelect', ...(require('src/pages/components/RegisterAreaSelect/model.js').default) });

require 应该换成 import,所以应该是这样的

import model form '@/components/RegisterAreaSelect/model.js';
window.g_app.model({ namespace: 'registerAreaSelect', ...model  });

@superchow +1

已解决
是因为 配置了 routes.exclude 路由过滤掉了 components 所以在 components 中不能使用model.js

'umi-plugin-react',
      {
        dva: { immer: true },
        antd: true,
        'antd-pro': true,
        routes: {
          exclude: [
            /model\.(j|t)sx?$/,
            /service\.(j|t)sx?$/,
            /models\//,
            /components\//,
            /services\//,
          ],
        },
Was this page helpful?
0 / 5 - 0 ratings