【发布时间】:2020-06-06 03:03:47
【问题描述】:
我正在尝试在 React 应用程序中实现一些代码拆分。在这种情况下,这并不是绝对必要的,因为它是一个相当小的应用程序,但我想我会先在低风险环境中尝试这种技术,然后再在更大的项目中实施它。
我的代码有效:
import React from 'react'
import { useUser } from './context/userContext'
import Layout from './components/layout'
import Routes from './components/routes'
import LandingScreen from './components/authApp/LandingScreen'
const App = () => {
const user = useUser()
return (
<>
{user ? (
<Layout>
<Routes />
</Layout>
) : (
<LandingScreen />
)}
</>
)
}
export default App
如果我尝试更改任何组件以使用 React.lazy,例如
const LandingScreen = React.lazy(() => import('./components/authApp/landingScreen'))
我的应用编译正常,但浏览器中没有呈现任何组件,我收到此错误:
index.js:1 The above error occurred in one of your React components:
in Unknown (at App.js:26)
in App (at src/index.js:14)
in UserProvider (at appProvider.js:7)
in AuthProvider (at appProvider.js:6)
in AppProviders (at src/index.js:13)
Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://reactjs.org/docs/error-boundaries.html to learn more about error boundaries.
如果我在这里做错了什么,我将不胜感激。 LandingScreen 组件只是渲染了一些 div 和我的登录组件,但是即使它只是渲染单个 div 也会出现同样的错误。'
编辑:将延迟加载的组件包装在 Suspense 组件中修复它。文档似乎表明 Suspense 组件是可选的,但也许不是?任何知道更多并且可以加入的人,将不胜感激。
【问题讨论】:
-
导入路径不错,是的,它确实默认导出组件。
-
感谢您对文档中的措辞提供反馈。我提出了更改措辞并可能开启对话的拉取请求:github.com/reactjs/reactjs.org/pull/2768
-
@Adam 很好的反馈,谢谢。我在 PR 中包含了一条关于可能更改措辞的说明,以明确其中一个或另一个是必需的。我将推送一个新的提交,并添加一些额外的措辞以使其更清晰。
-
我已将 PR 中的措辞更改为“必须在
Suspense组件或替代组件中呈现惰性组件”。如果您有更清晰的描述方式的想法,我愿意进行对话。 -
@JamieDixon 不,我认为可行。感谢您打开 PR,我认为它可以帮助像我这样的人。
标签: reactjs