如果没有在 URL 更改上重新加载页面,React 不会呈现

Posted

技术标签:

【中文标题】如果没有在 URL 更改上重新加载页面,React 不会呈现【英文标题】:React doesn't render without Reloading the page on URL Change 【发布时间】:2020-07-28 01:15:39 【问题描述】:

我正在尝试创建一个仪表板结构,在按钮单击时重定向到不同的组件。

我可以更改网址,但如果没有对该网址进行硬重新加载,页面仍然无法加载。

我的代码如下: Navigate.JS

import React from 'react';
import 
    BrowserRouter as Router,
    Switch,
    Route,
 from "react-router-dom";
import SalesDashBoard from "./salesDashBoard";
import OrderScreen from "./OrderScreen";


function SDNavigator()
    return(
        <div>
            <Router>
                <Switch>
                    <Route exact path="/salesDesk" component=SalesDashBoard/>
                    <Route exact path="/salesDesk/OrderScreen" component=OrderScreen/>
                </Switch>
            </Router>
        </div>
    )
export default SDNavigator;

SalesDashBoard.js

import React from 'react';
import BrowserRouter as Router, Link from "react-router-dom";
import Button from "@material-ui/core/Button";

function SalesDashBoard() 
    return (
        <Router>
            <div>
                <h3>Dashboard Links</h3>
                    <Button
                        component=Link to="/salesDesk/OrderScreen"
                        variant="contained"
                        color="primary"
                        type="submit"
                    >
                        Login
                    </Button>
            </div>
        </Router>
    )


export default SalesDashBoard;

OrderScreen.js

import React from 'react';

function OrderScreen() 
    return (
        <div Order Screen />
    );

export default OrderScreen;

点击完成并更改 URL 后重新加载时正在加载页面,但未重新加载它仍然显示 Dashboard 页面。

PS : 我已经从 App.js -> DashBoard.js 路由了这个,工作正常。

【问题讨论】:

你不应该有一个 &lt;Router /&gt; 包装你的每一个组件。它应该只位于组件树的顶层。那是你的问题; SalesDashBoard.js 中的链接与虚拟 DOM 树中最近的路由器相关联,并且该路由器实际上没有路由。 谢谢@101arrowz,现在我找到了逻辑问题和解决方案 【参考方案1】:

试试这个

function SalesDashBoard() 
    return (
      // Remove Router
            <div>
                <h3>Dashboard Links</h3>
                    <Button
                        component=Link to="/salesDesk/OrderScreen"
                        variant="contained"
                        color="primary"
                        type="submit"
                    >
                        Login
                    </Button>
            </div>

    )

【讨论】:

很高兴为您提供帮助 :)

以上是关于如果没有在 URL 更改上重新加载页面,React 不会呈现的主要内容,如果未能解决你的问题,请参考以下文章

如果 url 中的所有更改都是哈希,如何强制页面重新加载?

React页面不会在url查询更改时重新呈现

React 不会在路由参数更改或查询更改时重新加载组件数据

React 页面不会在 url 查询更改时重新呈现

如何在不重新加载页面的情况下更改 URL?

更改 url 而无需重新加载页面