Reactjs 一条路线可行,一条不可行';T

Reactjs 一条路线可行,一条不可行';T,reactjs,react-router,Reactjs,React Router,我刚开始学反应。我有一个应用程序组件,用于呈现主页和标题主页呈现输入和按钮,如果单击按钮且输入有效,我希望呈现组件仪表板,并将路径设置为“/Dashboard”。组件仪表板永远不会呈现,URL也不会更改。我不明白为什么组件Home呈现而仪表板不呈现,以及我应该在Home组件中的return语句中更改什么 这在我的应用程序组件中 render() { return ( <Router> <div className="app">

我刚开始学反应。我有一个应用程序组件,用于呈现主页标题主页呈现输入和按钮,如果单击按钮且输入有效,我希望呈现组件仪表板,并将路径设置为“/Dashboard”。组件仪表板永远不会呈现,URL也不会更改。我不明白为什么组件Home呈现而仪表板不呈现,以及我应该在Home组件中的return语句中更改什么

这在我的应用程序组件中

render() {
    return (
      <Router>
        <div className="app">
            <Header />
            <Route exact path={'/'} component={Home} />
        </div>
      </Router>
    );
}
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>
    );
}
render(){
返回(
);
}
这在我的主页组件中

render() {
    return (
      <Router>
        <div className="app">
            <Header />
            <Route exact path={'/'} component={Home} />
        </div>
      </Router>
    );
}
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>
    );
}
render(){
if(this.state.clicked){
if(this.state.valid)
返回(
)
其他的
this.change;//更改集单击为false
}
返回(
登录
);
}

只有在满足url的情况下,主组件才会呈现路由。在主组件中,您没有更改组件URL,只是告诉它如果URL与仪表板组件的路径匹配,则呈现仪表板组件。我想你想用的是反应路由器。调用此组件时,它会将您重定向到其他组件。但是,这意味着您必须在其他地方定义仪表板组件。在您的情况下,主页组件的外观如下:

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>
);
}
render(){
if(this.state.clicked){
if(this.state.valid)
返回(
)
其他的
this.change;//更改集单击为false
}
返回(
登录
);
}
您的应用程序组件将为仪表板设置路由

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

在ASP.NET MVC中,有一个扩展名是“路由调试器”。也许也是?我已经试过了(忘了提了),但后来我需要将道具传递给仪表板,我可以用重定向来完成吗?是的,你可以这样编写重定向组件:
,如果您试图只允许用户在登录后查看组件,我建议创建一个更高阶的组件来呈现PrivateRoute组件,该组件接收路由,并且仅在条件(如isAuthorized)为真时才呈现。它还不必如此复杂(我只是尝试学习一些基本的东西)但是谢谢你的建议!此外,重定向工程完美,我可以传递道具到仪表板,谢谢!