【问题标题】:Is there a best practice way to hide component using react router?是否有使用反应路由器隐藏组件的最佳实践方法?
【发布时间】:2020-03-14 20:51:20
【问题描述】:

要隐藏主页组件上的导航栏,我正在执行以下操作

const NavbarComponent = (props) => {
    console.log(props);

    if (props.match.path === '/') {
        return null;
    } else
        return (

它工作正常,我需要访问路由器,以便我可以将人们发送到依赖于 props 对象的位置,有没有更好的方法可以让我将所有路由器逻辑放在同一个地方?

这是我的路由器的当前状态

    return (
        <div>
            <Router>
                <Route component={Navbar} />

                <Switch>
                    <Route exact path="/" component={Home} />

                    <Route exact path="/api/:city/electronics" component={Electronics} />
                    <Route exact path="/api/:city/labour" component={Labour} />

                    <Route exact path="/api/posts/item/:id" component={ItemDetails} />

                    <Route exact path="/create/:city/:category" component={CreatePost} />
                </Switch>
            </Router>
        </div>
    );


感谢您的宝贵时间。

【问题讨论】:

    标签: javascript node.js reactjs react-router


    【解决方案1】:

    我不确定我是否理解为什么您的 NavBar 组件在它自己的 Route 中。 Router 中包含的任何组件都可以访问整个 Router api,包括 Link - 它们不需要是 Route 即可。

    我建议使用该组件包装所有包含NavBar 的路由。然后,Routes 将显示为 Navbar 组件的子组件。

    这是一个简化的例子:

    // App.js
    return (
        <div>
          <Router>
            <Switch>
              <Route exact path="/" component={Home} />
              <NavBar>
                <Route exact path="/electronics" component={Electronics} />
                <Route exact path="/labour" component={Labour} />
              </NavBar>
            </Switch>
          </Router>
        </div>
      );
    
    //NavBar.js
    return (
        <>
          <div>
            <Link to="/electronics">Electronics</Link>
            <Link to="/labour">Labour</Link>
          </div>
          <div>{props.children}</div>
        </>
      );
    

    codesandbox

    【讨论】:

    • props.children 指的是什么?
    • 包装NavBar 的组件。
    • 对不起,我对此感到困惑,通常我使用 react-router 根据我发送的路由进行路由,我通常不使用 Link ,所以 {props.children} 只是向我解释, “无论你想链接我们刚刚包裹在导航栏中的那些路线,都将它们放在这里”,对吗?
    • @jcx3x 来自 App.js 中路由器的包装 Routes,但它们可以是任何包装的组件。
    • 任何放在 NavBar 标签之间的活动 JSX 都会被 NavBar 组件渲染为 props.children,因为它实际上是该组件的子组件。你可以在里面放一个&lt;p&gt; 标签,它也会被渲染。无论您是使用链接还是重定向,或者将路径推送到历史对象,Router 都会以相同的方式响应。当一个路由因为它的路径与 url 匹配而变为活动状态时,它将通过props.children 呈现。
    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2017-02-21
    • 2018-07-09
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多