繁体   English   中英

在 React Router 中渲染多个组件

[英]Render multiple components in React Router

我习惯于应用具有多个收益区域的布局,即内容区域和顶部栏标题。 我想在 React Router 中实现类似的东西。 例如:

<Router>
  <Route path="/" component = { AppLayout }>
    <Route path="list"
           component = { ListView }
           topBarComponent = { ListTopBar }/>
  </Route>
</Router>

应用布局:

<div className="appLayout box">
  <div className="appLayout topBar">
    { -- display ListTopBar here -- }
  </div>
  <div className="appLayout content">
    { -- display ListView here -- }
  </div>     
</div>

两个子组件都应该接收相同的道具。

我该如何处理?

要传递多个组件,您可以这样做:

<Route path="groups" components={{main: Groups, sidebar: GroupsSidebar}} />
<Route path="users" components={{main: Users, sidebar: UsersSidebar}}>

请参阅此处的文档: https ://github.com/ReactTraining/react-router/blob/v3/docs/API.md#named-components

在 v4 中,根据文档,您可以像这样渲染多个组件:

<Route path='/some-path' render={() =>
  <Fragment>
    <FirstChild />
    <SecondChild />
  </Fragment>
} />

您可以使用 Fragments,而不是使用 div。 `

<Route path='/some-path' render={props =>
  <Fragment>
    <Child 1/>
    <Child 2/>
  </Fragment>
} />

`

要渲染多个组件,您可以这样做:

<Route 
    path="/EditEmployee/:id"  
    render={(props) => 
        <div>
            <NavMenu />
            <EditEmployee {...props} />
        </div> 
    } 
/>

在这里,我将参数传递给特定的组件。

//这是渲染多个组件的最简单方法,它适用于我

<Router>
  <Route path="/">
       <ListView />
       <ListTopBar /> 
  </Route>
</Router>

另一种方法是在路由的render方法中可以使用react.createElement创建多个传递的组件

<Route render ={(props)=>React.createElement(Component1, {...props}},
                     React.createElement(Component2, {...props}}/> 

对我有用的是将多个组件包装在<Fragment><div>作为父元素。


  return (
    < Router>
      <div className="App" >
        <Routes>
          <Route path='/'
            element={
              <Fragment>
                  < NavBar />
                  < NewsLetterCard />
                  < TestimonialsCard />
                  < ServicesCard />
                  < ContactsCard />
                  < Footer />
              </Fragment>
            }
          />
        </Routes>
      </div>
    </Router>
  );
}

 <Route path='/' element={<><Header /> <Home /></>} />

这在最新的反应路由器 dom v6 中对我有用

对于 v6,您使用 Routes 而不是 Switch 来渲染组件。 这有效:

<Router>
<Routes>
<Route path='/' element={<><Child1/> <Child2/></>} />
</Routes>
</Router>

但对于 v5,这有效:

<Router>
<Switch>
<Route path="/">
   <Child1/>
   <Child2/> 
</Route>

你也可以在最新版本的 React-router-dom 中使用 Array;

 <Route path="groups" element={[<Component1/>,<Component2/>]} />

会工作得很好。

这似乎对我有用,我只需要在主页(“/”)下添加 canvas animation 组件作为背景:

import Page from 'pages/Page';
import Blog from 'pages/Blog';
import Post from 'pages/Post';
import Category from 'pages/Category';
import CanvasParticles from 'components/canvas/CanvasParticles';

...

<Routes>
  {['/', '/:slug'].map((path, index) => {
  return path === '/' ? (
   <Route
    exact
    path={path}
    element={[<CanvasParticles />, <Page />]}
    key={index}
   />
  ):(
   <Route path={path} element={<Page />} key={index} />
  );
 })}
 <Route exact path="/blog" element={<Blog />}></Route>
 <Route path="/blog/:slug" element={<Post />}></Route>
 <Route path="/category/:slug" element={<Category />}></Route>
</Routes>

单击此您可以查看图像 v6 功能:这是渲染多个组件的最简单方法,它适用于我

主要概念是你应该用元素 <Route path="/" element={<> </>} 包装或用 Fragment <Route path="/" element={ } 包装

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM