【问题标题】:React Nested Routing with React Bootstrap Tabs使用 React Bootstrap 选项卡反应嵌套路由
【发布时间】:2021-04-06 08:14:30
【问题描述】:

我想将路由添加到我的画廊。我在我的页面上使用 Bootstrap 选项卡,每个选项卡都有一个用于不同类别图片的不同轮播。我想添加路由,这样用户就不会下载所有图片而是只下载他选择的部分。

所以我使用 Tab.Container、Tab.Content、Tab.Pane 的方法。当用户选择每个链接时,#category 会添加到链接中,但我的 Route 不会加载组件,甚至不会呈现简单的文本。不知道怎么回事。

幻灯片使用适当的 eventKey 包装在 Tab.Pane 中。

图库内容代码:

import {Link, Switch, Route, useRouteMatch} from 'react-router-dom';
import Tabs from 'react-bootstrap/Tabs';
import Tab from 'react-bootstrap/Tab';

import SchodySlideShow from './../../components/Slideshows/SchodySlideshow';
import PlytkiSlideShow from './../../components/Slideshows/PlytkiSlideshow';
import BalkonSlideShow from './../../components/Slideshows/BalkonSlideshow';
import OtherSlideShow from './../../components/Slideshows/OtherSlideshow';
import { Nav } from 'react-bootstrap';

const Gallery = () =>{
    let match = useRouteMatch();
    return (
        <React.Fragment>
            {/*
                 The old version how it was done (and it worked)
                <Tabs >
                    <Tab eventKey="Schody" title="Schody" className="tab-panel">
                       <SchodySlideShow />
                    </Tab>
                    <Tab eventKey="Płytki" title="Płytki" className="tab-panel">                        
                        <PlytkiSlideShow />
                    </Tab>
                    <Tab eventKey="Balkony" title="Balkony" className="tab-panel">
                       <BalkonSlideShow />
                    </Tab>
                    <Tab eventKey="Specjalne Zamówienia" title="Specjalne Zamówienia" className="tab-panel">                        
                        <OtherSlideShow />
                    </Tab>
                </Tabs>
            */}
            <Tab.Container defaultActiveKey="schody">
                <Nav>
                    <Nav.Item>
                        <Nav.Link eventKey="schody" as={Link} to={`${match.url}#schody`}>Schody</Nav.Link>
                    </Nav.Item>
                    <Nav.Item>
                        <Nav.Link eventKey="balkony" as={Link} to={`${match.url}#balkony`}>Balkony</Nav.Link>
                    </Nav.Item>
                    <Nav.Item>
                        <Nav.Link eventKey="plytki" as={Link} to={`${match.url}#plytki`}>Płytki</Nav.Link>
                    </Nav.Item>
                </Nav>
            </Tab.Container>
            <Tab.Content>
                <Switch>
                    <Route path={`${match.url}#schody`} component={SchodySlideShow} />
                    <Route path={`${match.url}#balkony`} component={BalkonSlideShow } />
                    <Route path={`${match.url}#plytki`} component = {PlytkiSlideShow} />
                </Switch>
                                
            </Tab.Content>
        </React.Fragment>
        
            
        
    );
}

export default Gallery;

【问题讨论】:

  • 仅更改片段 (#) 可能不会触发页面更改。
  • 如果您希望引导选项卡不加载所有选项卡的内容,您可以使用 mountOnEnter 属性。
  • @shaedrich,请发布正确的答案,以便解决这个问题。
  • @Kacz,请拨打tour 了解本网站的运作方式。

标签: javascript reactjs react-router-dom react-bootstrap


【解决方案1】:
<BrowserRouter>
            <Tab.Container defaultActiveKey="">
                  <Nav>
                      <Nav.Item>
                          <Nav.Link eventKey="users" as={Link} to={`/workhub/Users`}>Users</Nav.Link>
                      </Nav.Item>
                      <Nav.Item>
                          <Nav.Link eventKey="profiles" as={Link} to={`/workhub/Profiles`}>Profiles</Nav.Link>
                      </Nav.Item>
                      <Nav.Item>
                          <Nav.Link eventKey="errorcodes" as={Link} to={`/workhub/ErrorCodes`}>Error Codes</Nav.Link>
                      </Nav.Item>
                  </Nav>
              </Tab.Container>
              <Tab.Content>
                  <Routes>
                      <Route path={`/workhub/Users`} element={ <Users/> } />
                      <Route path={`/workhub/Profiles`} element={ <Profiles/> } />
                      <Route path={`/workhub/ErrorCodes`} element = { <ErrorCodes/> } />
                  </Routes>
              </Tab.Content>
          </div>
        </BrowserRouter>

【讨论】:

  • 享受 :-) 确保使用 react 路由器 6 及以上版本
  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2016-11-12
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 2018-02-16
  • 2016-08-18
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
相关资源
最近更新 更多