我正在尝试在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组件只是呈现一些和我的登录组件,但即使它只呈现一个单独的
,也会出现相同的错误。
编辑:在懒加载组件中包装组件可以解决此问题。文档似乎表明组件是可选的,但也许不是?如果有人更了解并能提出意见,那将不胜感激。
lazy
不一定要是Suspense
的子组件。1.lazy
组件应该是Suspense
的后代,但不必是其子组件(语义问题?)。2. 您可以使用其他东西来捕获抛出的Promise,Suspense
只是React提供的一个很好的API。 - Adam JenkinsSuspense
组件或其他替代组件中呈现”。如果你有更清晰地描述它的想法,我很愿意进行讨论。 - Jamie Dixon