ReactJS 中的路由。显示 URL 但未呈现组件

Posted

技术标签:

【中文标题】ReactJS 中的路由。显示 URL 但未呈现组件【英文标题】:Routing in ReactJS. URL is displayed but component is not rendered 【发布时间】:2019-04-15 01:58:34 【问题描述】:

我的父组件中有以下代码:

class App extends Component 
render() 
    return(
        <Router>
            <div>
            <Route exact path='/' component=Main />
            <Route path="/login" component=Login />
            </div>
        </Router>
    );

这在主要组件中:

import React,  Component  from "react";
import BrowserRouter as Router, Route, Link  from 'react-router-dom'

class Main extends Component 

    render() 
        return (
            <Router>
            <section className="section main">
            <div className="container">
            <div className="main-titles-container">
                <div className="main-titles">
                <div className="yellow-square"></div>
                <h1>Title</h1>
                <p>
                    Introduction
                </p>
                <div className="button-container">
                    <Link to='/login' className="btn select bg-yellow" id="buyer">Next</Link>
                </div>
                </div>
            </div>
        </div>
        </section>
        </Router>
        );
    


export default Main;

登录:

import React,  Component  from 'react';

class Login extends React.Component 
    constructor(props) 
      super(props);
      this.state = 
          email: "",
          cellphone: ""
      

      this.handleChange = this.handleChange.bind(this);
      this.handleSubmit = this.handleSubmit.bind(this);
    

    handleChange(e) 
      const target = e.target;
      this.setState(
        [target.name]: target.value
      );
    


    handleSubmit(e) 
      e.preventDefault();
      console.log(this.state);
    

    render() 
      return (
        <section className="section">
            <div className="container center center-xy">
                <h1 className="title center-self">Title</h1>
                <h1 className="title center-self">Log in</h1>
                <div className="form-container">
                    <form onSubmit=this.handleSubmit>
                    <label htmlFor="email">Email</label>
                    <input type="text" name="email" id="email" onChange=this.handleChange defaultValue="" required/>
                    <label htmlFor="cellphone">Cell phone</label>
                    <input type="text" name="cellphone" id="cellphone" defaultValue="" onChange=this.handleChange required/>
                    <button className="bg-yellow center-self" type="submit">Ok</button>
                    </form>
                </div>
            </div>
        </section>
      );
    
  

  export default Login;

单击时我想重定向到登录页面,但问题是当我单击该“按钮”时,URL 更改为“/登录”,但未呈现相应的组件。但是,如果我使用该 '/login' url 刷新页面,则会呈现组件。 提前感谢您的帮助!

编辑:我没有使用 PureComponent 并且在 withRouter 中包装导出也不能解决我的问题。

【问题讨论】:

请检查副本。如果这对你不起作用,请告诉我 @ShubhamKhatri 这些答案都没有解决我的问题 更多主要组件的代码将有助于找出解决方案 请显示您的登录名和主要组件 @ShubkhamKhatri 添加了 【参考方案1】:

您应该只让***组件(在您的情况下为App)呈现Router 组件。其下的所有组件(例如Main)在渲染函数中不应有Router。他们将继承父母的Router。您仍然可以在子组件中使用LinkRoute 组件,它们将导航父Router

【讨论】:

以上是关于ReactJS 中的路由。显示 URL 但未呈现组件的主要内容,如果未能解决你的问题,请参考以下文章

React 路由器更改 url 但未更新上下文

history.push 正在更改 url 但未在反应中呈现组件

单击图像时路由到另一个组件和页面reactjs

当 URL 不匹配任何路由并且 URL 包含 /#/ 时如何使用 ReactJS 显示 404

渲染路由器儿童ReactJS

ReactJS 中的动态路由到底是啥