【问题标题】:One route works and one doesn't一条路线有效,一条无效
【发布时间】:2017-12-18 18:28:21
【问题描述】:

我刚开始学习反应。我有一个呈现 HomeHeaderApp 组件。 Home 呈现一个输入和一个按钮,如果单击按钮并且输入有效,我想呈现组件 Dashboard 并将我的路由设置为“/dashboard”。 Dashboard 组件永远不会被渲染,并且 URL 也不会改变。我不明白为什么组件 Home 呈现而 Dashboard 不呈现,我应该在 Home 组件中的 return 语句中进行哪些更改。

这是在我的 App 组件中

render() {
    return (
      <Router>
        <div className="app">
            <Header />
            <Route exact path={'/'} component={Home} />
        </div>
      </Router>
    );
}

这是在我的 Home 组件中

render() {
    if(this.state.clicked) {
        if (this.state.valid)
            return (
                <div>
                    <Route path={'/dashboard'} component={Dashboard}/>
                </div>
            )
        else
            this.change; //change set clicked to false
    }
    return (
        <div>
            <input onChange={this.inputChange.bind(this)}/>
            <button onClick={this.login}>LOGIN</button>
        </div>
    );
}

【问题讨论】:

标签: reactjs react-router


【解决方案1】:

只有在满足 url 的情况下,你的 home 组件才会渲染路由。在您的主组件中,您并没有更改组件 URL,您只是告诉它在 url 与它的路径匹配时呈现仪表板组件。我认为您要使用的是 react-routers Redirect component。该组件在被调用时会将您重定向到不同的组件。但是,这意味着您必须在其他地方定义仪表板组件。在您的情况下,您的 Home 组件看起来像:

render() {
if(this.state.clicked) {
    if (this.state.valid)
        return (
            <Redirect to='/Dashboard' />
        )
    else
        this.change; //change set clicked to false
}
return (
    <div>
        <input onChange={this.inputChange.bind(this)}/>
        <button onClick={this.login}>LOGIN</button>
    </div>
);
}

您的 App 组件将为 Dashboard 设置路由

render() {
return (
  <Router>
    <div className="app">
        <Header />
        <Route exact path={'/'} component={Home} />
        <Route exact path={'/Dashboard'} component={Dashboard} />
    </div>
  </Router>
);
}

【讨论】:

  • 我已经尝试过了(忘了提),但后来我需要将道具传递给仪表板,我可以使用重定向来做到这一点吗?
  • 是的,你可以这样写你的重定向组件:&lt;Redirect to={{ pathname: '/login', state: { referrer: currentLocation } }}/&gt;
  • 另外,如果你试图只允许用户在登录后查看组件,我建议创建一个更高阶的组件来呈现一个 PrivateRoute 组件,该组件只接受一个路由如果条件(例如 isAuthorized)为真,则呈现它。
  • 它不必那么复杂(我只是想学习一些基本的东西)但感谢您的建议!重定向也很完美,我可以将道具传递给仪表板,谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 2020-03-15
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
相关资源
最近更新 更多