【问题标题】:Don't render a route on a specific path React Router Native?不要在特定路径上渲染路由 React Router Native?
【发布时间】:2017-08-29 07:41:08
【问题描述】:

我正在使用React Router Native 我想在特定路径上隐藏一个组件

<NativeRouter history={nativeHistory}>
  <Route exact path="/" component={Home} />
  <Route path="/about" component={About} />
  <Footer />
</NativeRouter>

在我的Home 组件中,当单击链接时About 组件必须呈现&Footer 必须隐藏& 其余路由Footer 必须呈现。 Footer 是一个无状态组件。

我尝试在我的Footer 组件中访问props.location,但它的undefined 因为props 是一个空对象{}

我的问题是如何仅将一条路径列入黑名单而不渲染特定组件?

【问题讨论】:

    标签: javascript react-native react-router react-router-v4 react-router-native


    【解决方案1】:

    您可以使用withRouter 访问您的Footer 中的props.location。 只需使用withRouter 包装返回值,您将获得与您用作路由组件的其他组件相同的道具。

    例如,您的Footer.js 应该是这样的:

    import { withRouter } from 'react-router-dom';
    
    class Footer extends React.Component {
      render() {
        ...
        // here you can access this.props.location and this.props.match
      }
    }
    
    export default withRouter(Footer);
    

    【讨论】:

    • 太棒了,这就是我要找的东西? 非常感谢 Win Chiu。
    【解决方案2】:

    在您的页脚组件上,您可以检查 currentPath 并相应地渲染组件。我没有使用 React Router Native,所以我真的不知道你是怎么做到的。

    我建议您使用其他一些更新且仍在维护的导航组件。 React-Navigation 是我可以推荐的其中之一。

    【讨论】:

    • 是的,我试过了,但是因为我不知道如何在所有屏幕中使用页脚组件,除了一个。也很难理解何时使用 Stack Navigator 和 Tab Navigator,所以我转向了这个。我现在也在想同样的事情,现在又转向 React Navigation。 &你的答案是正确的,但这就是问题本身。我无法访问页脚组件的历史记录,否则我会在不将其发布到 StackOverflow 的情况下完成它
    • 您是否尝试在 Home 组件中添加 Footer 组件,而不是在 rooter 上。这样您就不必控制路径,因为关于路径中不包含页脚。
    • 不,我有很多组件,例如Home,考虑ContactProfileMessages & 我不想通过将Footer 组件放在其他所有组件中来复制代码它会弄乱我当前的样式,但这是一种很好的方法,所以谢谢。如果没有任何效果,我会尝试这个,因为我只需要修改一些样式。
    猜你喜欢
    • 2020-09-12
    • 2017-06-07
    • 2017-11-15
    • 1970-01-01
    • 2018-04-18
    • 2018-01-06
    • 2022-01-13
    • 1970-01-01
    • 2018-10-18
    相关资源
    最近更新 更多