【问题标题】:ReactJS hide header on invalid page(404)ReactJS 在无效页面上隐藏标题(404)
【发布时间】:2018-04-07 06:37:51
【问题描述】:

我最近开始学习 React,我一直在试图弄清楚当用户试图路由到无效页面/路径时如何隐藏我的标题。我能想到的唯一方法是手动添加到我的每个组件并从我的 App.js 中删除。现在我只是将它们重定向到主页。下面是我的 App 和 Root JS 文件。在我拥有<Redirect to="/" /> 之前,我使用<Route component={invalidPage}/> 链接到一个InvalidPage 组件,但无法找到隐藏标题的方法。

//App.js
class App extends React.Component {
    render(){
        return(
            <Router>
                <Root>  
                    <Switch>
                        <Route exact path={"/"} component={Home}/>
                        <Route exact path={"/user"} component={User}/>
                        <Route exact path={"/home"} component={Home}/>      
                        <Redirect to="/"/>
                    </Switch>
                </Root>
            </Router>
        );
    }
}

//Root.js
export class Root extends React.Component{
    render(){
        return(
            <div className="container">
                <div className="row">
                    <div className="col-xs-10 col-xs-offset-1">
                        <Header/>
                    </div>
                </div>
                <div className="row">
                    <div className="col-xs-10 col-xs-offset-1">
                        {this.props.children}
                    </div>
                </div>
            </div>
        );
    }
}

【问题讨论】:

    标签: javascript reactjs ecmascript-6 react-router


    【解决方案1】:

    使用高阶组件。这种方法基本上应该有效。如果您遇到困难,请告诉我。

    //App.js
    class App extends React.Component {
      render(){
        return(
          <Router>
              <Switch>
                <Route exact path={"/"} component={withRoot(Home)}/>
                <Route exact path={"/user"} component={withRoot(User)}/>
                <Route exact path={"/home"} component={withRoot(Home)}/>
                <Route component={invalidPage}/>
              </Switch>
          </Router>
        );
      }
    }
    
    const withRoot= (Component)=> <Root><Component/></Root>
    

    【讨论】:

    • 这似乎是一个优雅的解决方案。我还是 React 的新手,所以我想知道这种性能与将 的内容粘贴到其他每个组件中相比如何。我的猜测是这样会更有效,因为只有 1 条路由会匹配,并且只有 1 条路由会添加标头。
    • 没关系。您的用户不会经常导航到新页面。 React 是用来编写的,而且非常擅长。
    • 我尝试了上述并得到了这个错误:"Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object."不确定这是什么意思
    • 尝试在组件名称周围添加标签或花括号。抱歉,我现在正在使用手机,无法查看详细信息。
    • 无法让它工作。我试着四处搜索,但找不到任何东西来解释 const withRoot= (Component)=&gt; &lt;Root&gt;&lt;Component/&gt;&lt;/Root&gt; 的工作原理或我遇到的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 2018-09-08
    • 1970-01-01
    • 2016-04-26
    • 2021-11-27
    • 2014-06-30
    • 2021-02-01
    相关资源
    最近更新 更多