简体   繁体   English

React JS 路由仅在重新加载时有效

[英]React JS routes only works when reloaded

I am having issues with my reactJS routes, When I click on a link, the URL changes on the address bar but it won't render the component except I reload the page.我的 reactJS 路由有问题,当我单击链接时,地址栏上的 URL 会发生变化,但它不会呈现组件,除非我重新加载页面。

This is my code:这是我的代码:

index.js index.js

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import {Switch, Route, BrowserRouter } from 'react-router-dom';
import Home from './components/Home';
import CreateProduct from './components/products/CreateProduct';

if (document.getElementById('root')) {
    ReactDOM.render(
        <BrowserRouter>
                <Switch>
                    <Route path="/home" component={Home} exact={true} />
                    <Route path="/products/add" component={CreateProduct} exact={true} />
                    <Home />
                </Switch>
        </BrowserRouter>,
        document.getElementById('root'));
}

Home.js主页.js

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import {Link, BrowserRouter} from "react-router-dom";

export default class Home extends Component {
    render(){
        return(
            <BrowserRouter>
                <Link className="nav-link" to="/products/add">Create Product</Link>
            </BrowserRouter>
        );
    }
}

CreateProduct.js创建产品.js

import React, {Component} from 'react';
import {Link, BrowserRouter} from "react-router-dom";

export default class CreateProduct extends Component{

    render(){
        return(
            <BrowserRouter>
                <Link className="nav-link" to="/home"></Link>
            </BrowserRouter>
        );
    }
}

Please what am I missing here?请问我在这里错过了什么?

I copied your code and I don't have any issue when I don't use nested BrowserRouters, as you have used.我复制了你的代码,当我不使用嵌套的 BrowserRouters 时,我没有任何问题,就像你使用的那样。 I think you only need the root one, in Index.js我认为您只需要在 Index.js 中的根目录

As you already wrapped your app with browser router it's properties are applied to everything it wraps so you don't need to use it in every component.由于您已经使用浏览器路由器包装了您的应用程序,因此它的属性将应用于它包装的所有内容,因此您无需在每个组件中都使用它。

Also if you want the route to be exact just write exact instead exact={true}另外,如果您希望路线准确,只需编写exact 而不是exact={true}

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import {Switch, Route, BrowserRouter } from 'react-router-dom';
import Home from './components/Home';
import CreateProduct from './components/products/CreateProduct';

if (document.getElementById('root')) {
    ReactDOM.render(
        <BrowserRouter>
                <Switch>
                    <Route path="/home" component={Home} exact />
                    <Route path="/products/add" component={CreateProduct} exact />
                    <Home />
                </Switch>
        </BrowserRouter>,
        document.getElementById('root'));
}


import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import {Link} from "react-router-dom";

export default class Home extends Component {
    render(){
        return(
            <Link className="nav-link" to="/products/add">Create Product</Link>
        );
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM