dvajs在嵌套路由中动态导入model

  1. 我想在子路由中动态导入model, 因为model比较大, 我需要在这个子页面加载的时候加载model, 另外这个我通过modelExtend 动态生成model(动态生成namespace)
    在子路由中动态导入model)
  2. 我的实现是在子路由中引入 app, 然后动态加载路由, 确实动态加载了子路由, 但是会报错
import React from 'react'
import modelExtend from 'dva-model-extend'
import { Route, Switch, Redirect } from 'react-router-dom'
import dynamic from 'dva/dynamic'
import app from '../../../index'

function StepRoutes({ match }) {
  const id = match.params.id
  const routes = [{
    path: `${match.url}/class-maintenance`,
    models: () => [modelExtend(ClassBasicModel, { namespace: `class-maintenance-${id}` })],
    component: () => import('./ClassMaintenance'),
  }, {
    path: `${match.url}/course-selection`,
    models: () => [import('./CourseSelection/basicModel')],
    component: () => import('../Steps/CourseSelection'),
  }]
  return (
    <Switch>
      <Route exact path={match.url} render={() => (<Redirect to={`${match.url}/class-maintenance`} />)} />
      {
        routes.map(({ path, ...dynamics }, index) => (
          <Route
            key={index}
            exact
            path={path}
            component={dynamic({ app, ...dynamics })}
          />
        ))
      }
    </Switch>
  )
}

export default StepRoutes

图片描述

3.请问我该怎么正确的实现这个需求呢? 谢谢.

阅读 7.6k
1 个回答

从你发出来的代码没有看,只有ClassBasicModel不知道从哪里来,或许你没有贴出来定义的代码。
其他的没有发现有什么问题。而且报的warning也无法与这段代码对应上。

需要注意的是:
modelExtend中的namespace会把原ClassBasicModelnamespace覆盖掉,在引用这个model时不要把namespace引错了就可以了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题