Как отложить загрузку компонентов в компонент React router dom Route?

У меня есть это:

<Router>
  <Route component={MyLazyLoadedComponent} />
</Router>

Я думал о том, чтобы сделать:

<Router>
  <Route render={props => {
    import('path/to/component').then(Module => {
      return <Module.default {...props.match.params} />
    })
  }} />
</Router/>

Но это не работает, поскольку компонент <Route /> маршрутизатора React Dom не является асинхронным (маршрут фактически отображается ПЕРЕД импортом). Как добиться этого разделения кода?

На самом деле вопрос также актуален для Webpack, а также для сборщика пакетов.


person Raz    schedule 14.05.2020    source источник
comment
Вы можете визуализировать динамический импорт, используя ленивый ответ.   -  person Ajeet Shah    schedule 14.05.2020
comment
Я пробовал это, но получил: Error: Cannot find module 'About.04ba37b6.js,../routes/About.jsx,About.04ba37b6.js.map,../routes/About.jsx'   -  person Raz    schedule 14.05.2020
comment
Как вы настроили свой проект React? Вы использовали CRA?   -  person Ajeet Shah    schedule 14.05.2020
comment
Нет, я не использовал его, просто создал вручную   -  person Raz    schedule 14.05.2020
comment
Если вы настраиваете Webpack самостоятельно, вы, вероятно, захотите прочитать руководство по Webpack по разделению кода. Конфигурация вашего Webpack должна выглядеть примерно так, как это   -  person Ajeet Shah    schedule 14.05.2020
comment
Я использую упаковщик посылок   -  person Raz    schedule 14.05.2020


Ответы (1)


Я думаю, это должно сработать:

const AsyncComponent = React.lazy(() => import('path/of/component'));

...

 <Route path={`path`} render={props => <AsyncComponent {...props} />} />

...

Надеюсь, это поможет!

person Idriss AIT HAFID    schedule 14.05.2020
comment
Пытался, но на самом деле код не разбивается - вместо нового фрагмента все еще остается один пакет. Сборщик посылок, вероятно, не распознает этот ленивый метод от реакции как что-то, что он должен разделить и отслеживать - person Raz; 14.05.2020