reactjs - 使用 React.lazy 时未捕获未定义错误

标签 reactjs typescript react-redux react-router create-react-app

我正在尝试实现 Route-based code splitting如 React 文档中所述。
这是我在添加惰性实现之前的应用程序。这工作正常:

import Counter from "./Counter";
import Home from "./Home";
import Login from "./Login";

export function App() {
  return (
      <Router>
        <Suspense fallback={<div>"Loading.."</div>}>
          <Switch>
            <Route exact path="/" component={Home} />
            <Route exact path="/login" component={Login} />
            <Route exact path="/counter" component={Counter} />
          </Switch>
      </Router>
  );
}
我所做的只是用这个替换了 3 个导入:
import { lazy, Suspense } from "react";
const Home = lazy(() => import("./Home"));
const Login = lazy(() => import("./Login"));
const Counter = lazy(() => import("./Counter"));
此代码构建成功,但浏览器上没有任何渲染,我在控制台中收到此错误:
Uncaught undefined
The above error occurred in one of your React components:
    in Unknown (created by Context.Consumer)
    in Route (at App.tsx:29)
    in Switch (at App.tsx:28)
    in Suspense (at App.tsx:27)
    in Router (created by BrowserRouter)
    in BrowserRouter (at App.tsx:25)
    in ErrorBoundary (at App.tsx:24)
    in App (at src/index.tsx:19)
    in Provider (at src/index.tsx:18)
    in StrictMode (at src/index.tsx:17)
难道我做错了什么?
附加上下文:
如果重要的话,组件被命名为默认重新导出的组件,因为 React.lazy 要求这样做:
export { Home as default } from "./Home";
其中一个组件使用 redux,因此应用程序被包装在一个商店提供程序中:
    <Provider store={store}>
      <App />
    </Provider>
这是我的 tsconfig:
{
  "compilerOptions": {
    "baseUrl": ".",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",
    "noFallthroughCasesInSwitch": true,
    "target": "es5",
    "module": "esnext"
  },
  "include": [
    "src"
  ]
}
和包版本:
    "react": "^17.0.1",
    "react-dom": "^16.13.1",
    "react-redux": "^7.2.1",
    "react-scripts": "^4.0.1",
    "react-router-dom": "^5.2.0",
    "typescript": "^4.1.2",
这是source code和可能相关的 issue on GitHub .

最佳答案

在查看了我自己的问题之后,我想出了查看依赖项的方法。我的 reactreact-dom在不同的主要版本上。
这修复了它:npm i -D react-dom@17.0.1

关于reactjs - 使用 React.lazy 时未捕获未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65183174/

相关文章:

javascript - 如何更改 react native map 中的标记位置?

javascript - 传递函数中的 typescript "this"

javascript - Angular 2 工具提示应在移动设备或调整窗口大小时自动调整位置

javascript - React JS,Redux状态更新错误,无法读取属性Symbol(Symbol.iterator)

reactjs - 如何在 Material ui表中的每一行添加一个按钮

reactjs - 在图表的轴上隐藏数字

javascript - 如何使用 defineprop 和接口(interface)在 Vue 3 脚本设置中使用动态 Prop 类型

javascript - 当组件重新渲染时进行 API 调用的 React 生命周期方法

javascript - ReduxForm 需要 store 作为测试中的 props 传递

reactjs - 枚举值中的字符串连接