Ленивый компонент React Router не работает

Итак, это работает:

import Page from 'components/Page';
...

render() {
   return (
     <Route render = {props => <Page {...props}/>}/>
   );
}

Но это не так:

import React, { lazy } from 'react';
const Cmp = lazy(() => import('components/Page'));
...

render() {
   return (
     <Route render = {props => <Cmp {...props}/>}/>
   );
}

Реагировать 16.8.6 Реагирующий маршрутизатор 5.0.0

Я получаю это:

The above error occurred in one of your React components:
    in Unknown (at configured.route.js:41)
    in Route (at configured.route.js:41)
    in ConfiguredRoute (created by Context.Consumer)
    ...rest of stack trace

Кто-нибудь может увидеть, какую глупость я здесь делаю?

Разве вам не нужно использовать саспенс с запасным вариантом? Я предполагаю, что компонент Cmp еще не создан, поэтому у вас есть объект, распределенный по отложенному? Можете ли вы отладить, что такое Cmp при рендеринге/сбое?

John Ruddell 22.05.2019 01:40

Ответьте, что @JohnRuddell - вам нужно определить fallback - если вы завернете компонент в <Suspense>, но не определите fallback, он потерпит неудачу так же.

Adam 22.05.2019 01:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
11
2
6 511
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ссылаясь на React Docs по разделению кода, рекомендуется использовать Suspense с определенным fallback, чтобы у вас было что отображать вместо компонентов, когда они не загружены.

// Direct paste from https://reactjs.org/docs/code-splitting.html

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import React, { Suspense, lazy } from 'react';

const Home = lazy(() => import('./routes/Home'));
const About = lazy(() => import('./routes/About'));

const App = () => (
  <Router>
    <Suspense fallback = {<div>Loading...</div>}>
      <Switch>
        <Route exact path = "/" component = {Home}/>
        <Route path = "/about" component = {About}/>
      </Switch>
    </Suspense>
  </Router>
);

Приостановка должна быть родителем элементов <Route>, которые используют lazy

Для протокола: я знал, что приостановка с откатом была рекомендацией, я никогда не знал, что она выдаст ошибку (может быть, только в режиме разработки?), Если вы ее не предоставите.

Adam 22.05.2019 12:48

И под «это» выше я имел в виду, что это приведет к ошибкам, если вы предоставите компонент Suspense, но не опору fallback.

Adam 23.05.2019 13:08

Я обновил версию реакции, и эта ошибка начала появляться, потому что я забыл также обновить версию пакета react-dom, как только я это сделал, все заработало нормально.

Другие вопросы по теме