- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试在我的应用程序中实现 React Router,我想在所有页面上使用最新版本 (6.4) 和 Layout,因此我将 createBrowserRouter 与我的 Layout 元素和所有子元素一起使用来制作不同的路线,但是实际上我的代码中看不到它们中的任何一个。
我想获取每个页面的布局,根据导航进行条件渲染,所以我必须将它放在路由器中。
我试着按照文档 ( https://reactrouter.com/en/main/routers/create-browser-router ) ,嵌套带有子项的路由:
路由器组件:
const router = createBrowserRouter([
{
element: <Layout />,
children: [
{
path: '/',
element: <Dashboard />,
},
{
path: 'gestion_preferences',
element: <ManagePreferences />,
},
{
path: 'trame_preferences',
element: <ManageTrames />,
},
],
},
])
布局组件:
const Layout = () => {
return (
<Container
sx={{ height: '100%' }}
maxWidth={false}
disableGutters={true}
>
<Header />
<Box
sx={{
height: "100%",
overflowY: "auto",
display: 'flex',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
bgcolor: 'background.main',
zIndex:1,
}}
>
<Outlet />
</Box>
<Footer />
</Container>
)
}
应用组件:
const router = createBrowserRouter(routesConfig)
const App = () => {
return (
<ThemeProvider theme={theme}>
<CssBaseline />
<UserProvider>
<Layout>
<RouterProvider router={router} />
</Layout>
</UserProvider>
</ThemeProvider>
)
}
我不想手动重复我所有组件中的元素
编辑:我添加了其他组件一起工作,我也尝试在我的布局中放置 {children} 而不是 Outlet
最佳答案
根据我对您的代码示例的了解,问题是 Layout
组件在两个地方呈现。一旦正确作为布局路由,嵌套路由可以将它们的 element
渲染到 Layout
渲染的 Outlet
中,然后再次在 App 中渲染
组件包装了 RouterProvider
组件。问题是 Layout
不会使用和呈现任何 children
Prop ,因此不会呈现包装的 RouterProvider
。
布局
const Layout = () => { // <-- no children prop
return (
<Container
sx={{ height: '100%' }}
maxWidth={false}
disableGutters={true}
>
<Header />
<Box ....>
<Outlet />
</Box>
<Footer />
</Container>
)
}
应用
const router = createBrowserRouter(routesConfig);
const App = () => {
return (
<ThemeProvider theme={theme}>
<CssBaseline />
<UserProvider>
<Layout>
<RouterProvider router={router} /> // <-- child of Layout
</Layout>
</UserProvider>
</ThemeProvider>
);
};
BrowswerRouter
数据路由器已经在渲染 Layout
组件,因此在 App
组件中完全没有必要,应该将其删除。
应用
const router = createBrowserRouter(routesConfig);
const App = () => {
return (
<ThemeProvider theme={theme}>
<CssBaseline />
<UserProvider>
<RouterProvider router={router} />
</UserProvider>
</ThemeProvider>
);
};
关于reactjs - React Router 6.4 "CreateBrowserRouter"子元素不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74617287/
我目前正在尝试在我的应用程序中实现 React Router,我想在所有页面上使用最新版本 (6.4) 和 Layout,因此我将 createBrowserRouter 与我的 Layout 元素和
我正在使用react v18和react-router-dom v6.4.1创建一个应用程序,其中我使用createBrowserRouter函数,如文档中所示( https://reactroute
react-router-dom v. 6.4.2 不允许 history.listen,如下面的代码示例所引用。这是针对具有模块联合的 mfe。 在使用 history.listen 的代码示例中,
我是一名优秀的程序员,十分优秀!