React 路由不接受组件
React routes does't accept the components
我写了一段代码来在用户转到某个路径时显示一些组件,在这种情况下,当用户转到“/”路径时,它应该 return 一个 Header 和 Home 组件,但是我得到这些错误:
错误:
uncaught Error: [Header] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>
at invariant (router.ts:5:1)
at components.tsx:291:1
at react.development.js:1195:1
at react.development.js:1158:1
at mapIntoArray (react.development.js:1049:1)
at mapIntoArray (react.development.js:1099:1)
at mapChildren (react.development.js:1157:1)
at Object.forEachChildren [as forEach] (react.development.js:1194:1)
at createRoutesFromChildren (components.tsx:275:1)
at components.tsx:306:1
invariant @ router.ts:5
(anonymous) @ components.tsx:291
(anonymous) @ react.development.js:1195
(anonymous) @ react.development.js:1158
mapIntoArray @ react.development.js:1049
mapIntoArray @ react.development.js:1099
mapChildren @ react.development.js:1157
forEachChildren @ react.development.js:1194
createRoutesFromChildren @ components.tsx:275
(anonymous) @ components.tsx:306
(anonymous) @ react.development.js:1195
(anonymous) @ react.development.js:1158
mapIntoArray @ react.development.js:1049
mapChildren @ react.development.js:1157
forEachChildren @ react.development.js:1194
createRoutesFromChildren @ components.tsx:275
Routes @ components.tsx:256
renderWithHooks @ react-dom.development.js:16141
mountIndeterminateComponent @ react-dom.development.js:20838
beginWork @ react-dom.development.js:22342
callCallback @ react-dom.development.js:4157
invokeGuardedCallbackDev @ react-dom.development.js:4206
invokeGuardedCallback @ react-dom.development.js:4270
beginWork @ react-dom.development.js:27243
performUnitOfWork @ react-dom.development.js:26392
workLoopSync @ react-dom.development.js:26303
renderRootSync @ react-dom.development.js:26271
performConcurrentWorkOnRoot @ react-dom.development.js:25577
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533
router.ts:5 Uncaught Error: [Header] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>
at invariant (router.ts:5:1)
at components.tsx:291:1
at react.development.js:1195:1
at react.development.js:1158:1
at mapIntoArray (react.development.js:1049:1)
at mapIntoArray (react.development.js:1099:1)
at mapChildren (react.development.js:1157:1)
at Object.forEachChildren [as forEach] (react.development.js:1194:1)
at createRoutesFromChildren (components.tsx:275:1)
at components.tsx:306:1
invariant @ router.ts:5
(anonymous) @ components.tsx:291
(anonymous) @ react.development.js:1195
(anonymous) @ react.development.js:1158
mapIntoArray @ react.development.js:1049
mapIntoArray @ react.development.js:1099
mapChildren @ react.development.js:1157
forEachChildren @ react.development.js:1194
createRoutesFromChildren @ components.tsx:275
(anonymous) @ components.tsx:306
(anonymous) @ react.development.js:1195
(anonymous) @ react.development.js:1158
mapIntoArray @ react.development.js:1049
mapChildren @ react.development.js:1157
forEachChildren @ react.development.js:1194
createRoutesFromChildren @ components.tsx:275
Routes @ components.tsx:256
renderWithHooks @ react-dom.development.js:16141
mountIndeterminateComponent @ react-dom.development.js:20838
beginWork @ react-dom.development.js:22342
callCallback @ react-dom.development.js:4157
invokeGuardedCallbackDev @ react-dom.development.js:4206
invokeGuardedCallback @ react-dom.development.js:4270
beginWork @ react-dom.development.js:27243
performUnitOfWork @ react-dom.development.js:26392
workLoopSync @ react-dom.development.js:26303
renderRootSync @ react-dom.development.js:26271
recoverFromConcurrentError @ react-dom.development.js:25689
performConcurrentWorkOnRoot @ react-dom.development.js:25589
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533
Show 2 more frames
react-dom.development.js:18525 The above error occurred in the <Routes> component:
at Routes (http://localhost:3000/static/js/bundle.js:49707:5)
at Router (http://localhost:3000/static/js/bundle.js:49640:15)
at BrowserRouter (http://localhost:3000/static/js/bundle.js:48449:5)
at div
at App
Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.
logCapturedError @ react-dom.development.js:18525
update.callback @ react-dom.development.js:18558
callCallback @ react-dom.development.js:13092
commitUpdateQueue @ react-dom.development.js:13113
commitLayoutEffectOnFiber @ react-dom.development.js:23204
commitLayoutMountEffects_complete @ react-dom.development.js:24461
commitLayoutEffects_begin @ react-dom.development.js:24447
commitLayoutEffects @ react-dom.development.js:24385
commitRootImpl @ react-dom.development.js:26651
commitRoot @ react-dom.development.js:26517
finishConcurrentRender @ react-dom.development.js:25731
performConcurrentWorkOnRoot @ react-dom.development.js:25648
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533
router.ts:5 Uncaught Error: [Header] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>
at invariant (router.ts:5:1)
at components.tsx:291:1
at react.development.js:1195:1
at react.development.js:1158:1
at mapIntoArray (react.development.js:1049:1)
at mapIntoArray (react.development.js:1099:1)
at mapChildren (react.development.js:1157:1)
at Object.forEachChildren [as forEach] (react.development.js:1194:1)
at createRoutesFromChildren (components.tsx:275:1)
at components.tsx:306:1
这是我的 App.js 源代码:
import './App.css';
import Header from './Main__components/Header';
import Home from './Main__components/Home';
import {BrowserRouter as Router , Routes, Route} from "react-router-dom"
import React from 'react';
function App() {
return (
<div className="App">
<Router>
<Routes>
<Route path='/'>
<Header />
<Home />
</Route>
</Routes>
</Router>
</div>
);
}
export default App;
我花了好几个小时试图解决这个问题,老实说,我没有更多的想法
有什么想法吗?
其他 Route
组件是 Route
组件的唯一有效子组件。在 element
属性上呈现所有路由内容。
示例:
<Router>
<Routes>
<Route
path='/'
element={(
<>
<Header />
<Home />
</>
)}
/>
</Routes>
</Router>
如果你想用多个路由渲染 Header
组件,那么使用所谓的 layout route 来渲染 Header
组件以及 Outlet
要渲染到的嵌套路由。
示例:
import { Outlet } from 'react-router-dom';
const HeaderLayout = () => (
<>
<Header />
<Outlet />
</>
);
...
<Router>
<Routes>
<Route element={<HeaderLayout />}>
<Route path='/' element={<Header />} />
... other routes with header
</Route>
... routes w/o header
</Routes>
</Router>
您在路线中设置的元素有误。
你需要这样做:
<Routes>
<Route exact path='/' element={<HomeAndHeader/>}/>
</Routes>
另外别忘了你不能在这里放置多个元素,所以你需要将它们包围在一个组件中。您可以使用片段或仅创建一个包含它们的单个组件来完成此操作。
我写了一段代码来在用户转到某个路径时显示一些组件,在这种情况下,当用户转到“/”路径时,它应该 return 一个 Header 和 Home 组件,但是我得到这些错误:
错误:
uncaught Error: [Header] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>
at invariant (router.ts:5:1)
at components.tsx:291:1
at react.development.js:1195:1
at react.development.js:1158:1
at mapIntoArray (react.development.js:1049:1)
at mapIntoArray (react.development.js:1099:1)
at mapChildren (react.development.js:1157:1)
at Object.forEachChildren [as forEach] (react.development.js:1194:1)
at createRoutesFromChildren (components.tsx:275:1)
at components.tsx:306:1
invariant @ router.ts:5
(anonymous) @ components.tsx:291
(anonymous) @ react.development.js:1195
(anonymous) @ react.development.js:1158
mapIntoArray @ react.development.js:1049
mapIntoArray @ react.development.js:1099
mapChildren @ react.development.js:1157
forEachChildren @ react.development.js:1194
createRoutesFromChildren @ components.tsx:275
(anonymous) @ components.tsx:306
(anonymous) @ react.development.js:1195
(anonymous) @ react.development.js:1158
mapIntoArray @ react.development.js:1049
mapChildren @ react.development.js:1157
forEachChildren @ react.development.js:1194
createRoutesFromChildren @ components.tsx:275
Routes @ components.tsx:256
renderWithHooks @ react-dom.development.js:16141
mountIndeterminateComponent @ react-dom.development.js:20838
beginWork @ react-dom.development.js:22342
callCallback @ react-dom.development.js:4157
invokeGuardedCallbackDev @ react-dom.development.js:4206
invokeGuardedCallback @ react-dom.development.js:4270
beginWork @ react-dom.development.js:27243
performUnitOfWork @ react-dom.development.js:26392
workLoopSync @ react-dom.development.js:26303
renderRootSync @ react-dom.development.js:26271
performConcurrentWorkOnRoot @ react-dom.development.js:25577
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533
router.ts:5 Uncaught Error: [Header] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>
at invariant (router.ts:5:1)
at components.tsx:291:1
at react.development.js:1195:1
at react.development.js:1158:1
at mapIntoArray (react.development.js:1049:1)
at mapIntoArray (react.development.js:1099:1)
at mapChildren (react.development.js:1157:1)
at Object.forEachChildren [as forEach] (react.development.js:1194:1)
at createRoutesFromChildren (components.tsx:275:1)
at components.tsx:306:1
invariant @ router.ts:5
(anonymous) @ components.tsx:291
(anonymous) @ react.development.js:1195
(anonymous) @ react.development.js:1158
mapIntoArray @ react.development.js:1049
mapIntoArray @ react.development.js:1099
mapChildren @ react.development.js:1157
forEachChildren @ react.development.js:1194
createRoutesFromChildren @ components.tsx:275
(anonymous) @ components.tsx:306
(anonymous) @ react.development.js:1195
(anonymous) @ react.development.js:1158
mapIntoArray @ react.development.js:1049
mapChildren @ react.development.js:1157
forEachChildren @ react.development.js:1194
createRoutesFromChildren @ components.tsx:275
Routes @ components.tsx:256
renderWithHooks @ react-dom.development.js:16141
mountIndeterminateComponent @ react-dom.development.js:20838
beginWork @ react-dom.development.js:22342
callCallback @ react-dom.development.js:4157
invokeGuardedCallbackDev @ react-dom.development.js:4206
invokeGuardedCallback @ react-dom.development.js:4270
beginWork @ react-dom.development.js:27243
performUnitOfWork @ react-dom.development.js:26392
workLoopSync @ react-dom.development.js:26303
renderRootSync @ react-dom.development.js:26271
recoverFromConcurrentError @ react-dom.development.js:25689
performConcurrentWorkOnRoot @ react-dom.development.js:25589
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533
Show 2 more frames
react-dom.development.js:18525 The above error occurred in the <Routes> component:
at Routes (http://localhost:3000/static/js/bundle.js:49707:5)
at Router (http://localhost:3000/static/js/bundle.js:49640:15)
at BrowserRouter (http://localhost:3000/static/js/bundle.js:48449:5)
at div
at App
Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.
logCapturedError @ react-dom.development.js:18525
update.callback @ react-dom.development.js:18558
callCallback @ react-dom.development.js:13092
commitUpdateQueue @ react-dom.development.js:13113
commitLayoutEffectOnFiber @ react-dom.development.js:23204
commitLayoutMountEffects_complete @ react-dom.development.js:24461
commitLayoutEffects_begin @ react-dom.development.js:24447
commitLayoutEffects @ react-dom.development.js:24385
commitRootImpl @ react-dom.development.js:26651
commitRoot @ react-dom.development.js:26517
finishConcurrentRender @ react-dom.development.js:25731
performConcurrentWorkOnRoot @ react-dom.development.js:25648
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533
router.ts:5 Uncaught Error: [Header] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>
at invariant (router.ts:5:1)
at components.tsx:291:1
at react.development.js:1195:1
at react.development.js:1158:1
at mapIntoArray (react.development.js:1049:1)
at mapIntoArray (react.development.js:1099:1)
at mapChildren (react.development.js:1157:1)
at Object.forEachChildren [as forEach] (react.development.js:1194:1)
at createRoutesFromChildren (components.tsx:275:1)
at components.tsx:306:1
这是我的 App.js 源代码:
import './App.css';
import Header from './Main__components/Header';
import Home from './Main__components/Home';
import {BrowserRouter as Router , Routes, Route} from "react-router-dom"
import React from 'react';
function App() {
return (
<div className="App">
<Router>
<Routes>
<Route path='/'>
<Header />
<Home />
</Route>
</Routes>
</Router>
</div>
);
}
export default App;
我花了好几个小时试图解决这个问题,老实说,我没有更多的想法 有什么想法吗?
其他 Route
组件是 Route
组件的唯一有效子组件。在 element
属性上呈现所有路由内容。
示例:
<Router>
<Routes>
<Route
path='/'
element={(
<>
<Header />
<Home />
</>
)}
/>
</Routes>
</Router>
如果你想用多个路由渲染 Header
组件,那么使用所谓的 layout route 来渲染 Header
组件以及 Outlet
要渲染到的嵌套路由。
示例:
import { Outlet } from 'react-router-dom';
const HeaderLayout = () => (
<>
<Header />
<Outlet />
</>
);
...
<Router>
<Routes>
<Route element={<HeaderLayout />}>
<Route path='/' element={<Header />} />
... other routes with header
</Route>
... routes w/o header
</Routes>
</Router>
您在路线中设置的元素有误。 你需要这样做:
<Routes>
<Route exact path='/' element={<HomeAndHeader/>}/>
</Routes>
另外别忘了你不能在这里放置多个元素,所以你需要将它们包围在一个组件中。您可以使用片段或仅创建一个包含它们的单个组件来完成此操作。