【问题标题】:React Suspense not working when fallback component is imported导入后备组件时 React Suspense 不起作用
【发布时间】:2020-11-23 22:28:17
【问题描述】:

我制作了一个看起来像这样的LoaderPage 组件

import theme from "../../assets/styles/globalStyles"
import Loader from "react-loader-spinner"
import React from "react"
import styled from "styled-components"

const Background = styled.div`
    display: "flex",
    align-items: "center",
    justify-content: "center",
    height: "100vh",
    background-color: ${theme.secondary}
`

export default function LoaderPage() {
    return (
        <Background>
            <Loader type="TailSpin" color={theme.primary} height={100} width={100} />
        </Background>
    )
}

我试图将它作为我的路由器组件中的 Suspense 的后备组件,但 LoaderPage 组件在任何其他延迟加载组件加载之前不会显示

import React = require("react")
import { BrowserRouter as Router, Switch, Route, Redirect } from "react-router-dom"
const LoaderPage = import("../../pages/LoaderPage")
const LoginPage = React.lazy(() => import("../../pages/LoginPage"))

import PrivateRoute from "../Router/privateRoute"

export default function SNRoutes(): any {
    return (
        <Router>
            <React.Suspense fallback={LoaderPage}>
                <Switch>
                    <PrivateRoute exact path="/" component={LoginPage} />
                    <Route exact path="/login" component={LoginPage} />
                    <Redirect from="*" to="/" />
                </Switch>
            </React.Suspense>
        </Router>
    )
}

当我复制粘贴 LoaderPage 组件并将其保留在我的路由器组件中而不是导入它时,它仍然可以工作`。

请帮忙。

【问题讨论】:

  • 试试import LoaderPage from "../../pages/LoaderPage"

标签: reactjs lazy-loading react-suspense


【解决方案1】:

const LoaderPage = import("../../pages/LoaderPage") 是一个动态导入,它返回一个 Promise。实际的LoaderPage 可以通过以下方式访问:

let LoaderPage = null;
const LoaderPagePromise = import("../../pages/LoaderPage");
LoaderPagePromise.then(module => LoaderPage = module.default);

&lt;Suspense fallback={LoaderPage}&gt; 无法正常工作

您应该改用此导入:

import LoaderPage from "../../pages/LoaderPage";

【讨论】:

  • 我应该使用fallback={LoaderPage}fallback={&lt;LoaderPage /&gt;}fallback={LoaderPage()}吗?
  • fallback={&lt;LoaderPage /&gt;}
猜你喜欢
  • 2022-12-23
  • 1970-01-01
  • 2020-10-27
  • 2020-06-24
  • 2020-07-29
  • 2019-12-15
  • 2019-07-31
  • 2015-07-27
  • 1970-01-01
相关资源
最近更新 更多