【问题标题】:Why react router switch doesn't work when window location changed?为什么当窗口位置改变时反应路由器开关不起作用?
【发布时间】:2020-12-12 17:47:56
【问题描述】:

当我使用重定向、导航链接或其他图书馆工作人员时,React 路由器开关工作正常。

问题出在 loadOrderPage 函数中。触发时,窗口位置更改正常,但页面不会根据 react-router 切换规则重新渲染,因此“/order”的组件在此功能完成后不会渲染。

这是我的简单反应类

此处的实时工作示例:https://codesandbox.io/s/delicate-wildflower-sdvd4?file=/src/App.js

import React from "react";
import {
  BrowserRouter as Router,
  Redirect,
  Route,
  Switch,
} from "react-router-dom";
import Startpage from "./components/startpage";
import Orderpage from "./components/orderpage";
import { withRouter } from "react-router";

class App extends React.Component {

.......

  loadOrderPage = () => {
    this.props.history.push("/order");
  };

  render() {

    return (
      <Router>
        <Switch>
          <Route path="/order">
            <Orderpage />
          </Route>
          <Route path="/">
            <Startpage/>
          </Route>
        </Switch>
      </Router>
    );
  }
}

export default withRouter(App);

怎么了?我希望能够更改函数中的窗口位置并等待反应路由器在切换规则下呈现正确的组件。可能有更合适的方法吗?

【问题讨论】:

    标签: reactjs react-router


    【解决方案1】:

    您不能在index.jsApp.js 中定义两个。从您的App.js 中删除&lt;Router&gt;&lt;/Router&gt;

    确保将exact 添加到您的&lt;Route /&gt;

    <Route exact path="/order">
      <Orderpage />
    </Route>
    <Route exact path="/">
       <Startpage/>
    </Route>
    

    【讨论】:

    • 您确定&lt;Orderpage /&gt; 工作正常吗?你能代替它呈现简单的文本吗?
    • 是的,我确定并且简单 工作正常
    • 即使我在历史推送后刷新页面也正常
    • 在此处添加了实时代码示例,codesandbox.io/s/delicate-wildflower-sdvd4?file=/src/App.js
    • 好的,我知道出了什么问题。让我更新我的答案。
    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多