React Router 5.1-useLocation挂钩-确定过去的位置

时间:2020-05-06 19:37:04

标签: reactjs react-router-v5

根据React Router 5.1 documentation,应该可以看到“该应用程序现在在哪里,您想去哪里,甚至在哪里”。在我的应用中,我需要查看“它在哪里”-降落到特定位置之前我访问过的位置。

更准确地说;我希望找到一个符合特定模式的优越位置。该位置可能是两三个位置。

但是-我不知道如何执行此操作。

实现此目标的最佳和推荐方法是什么?

亲切的问候/ K

3 个答案:

答案 0 :(得分:0)

在React Router中,如果您需要对历史记录中的先前路径做出反应,则可以使用goBack()方法。另外,可以将您的路径推向历史记录状态,但这仅在您需要知道先前位置的URL时才需要。

您可以从此处了解有关此功能的更多信息:https://reacttraining.com/react-router/web/api/history

答案 1 :(得分:0)

您可以检查此示例。希望对您有帮助。

import React from "react";
import {BrowserRouter as Router,Switch,Route,Link} from "react-router-dom";
import { withRouter } from "react-router";

export default function BasicExample() {
  return (
    <Router>
      <div>
        <ul>
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/about">About</Link>
          </li>
        </ul>

        <hr />
        <Switch>
          <Route exact path="/">
            <Home />
          </Route>
          <Route path="/about">
            <About />
          </Route>
        </Switch>
      </div>
    </Router>
  );
}

function Home() {
  return (
    <div>
      <h2>Home</h2>
    </div>
  );
}

const About = withRouter(({history, ...props}) => (
  <h1 {...props}>
    About
    <hr/>
    <button onClick={() => {history.push('/')}}>go back</button>
  </h1>
));

另一个返回-2的示例

import React from "react";
import {BrowserRouter as Router, Switch, Route, Link} from "react-router-dom";
import {withRouter} from "react-router";

export default function BasicExample() {
    return (
        <Router>
            <div>
                <ul>
                    <li>
                        <Link to="/">Home</Link>
                    </li>
                    <li>
                        <Link to="/about">About</Link>
                    </li>
                    <li>
                        <Link to="/about/insideabout">Inside About</Link>
                    </li>
                </ul>
                <hr/>
                <Switch>
                    <Route exact path="/">
                        <Home/>
                    </Route>
                    <Route exact path="/about">
                        <About/>
                    </Route>
                    <Route path="/about/insideabout">
                        <InsideAbout/>
                    </Route>
                </Switch>
            </div>
        </Router>
    );
}

function Home() {
    return (
        <div>
            <h2>Home</h2>
        </div>
    );
}

const About = withRouter(({history, ...props}) => (
    <div>
        <h1>
            About
            <hr/>
            <button onClick={() => {
                // history.push('/')
                history.goBack(-1);
            }}>go back
            </button>
        </h1>
    </div>
));

const InsideAbout = withRouter(({history, ...props}) => (
    <h1 {...props}>
        Inside About
        <hr/>

        <button onClick={() => {
            history.goBack();
        }}>go back
        </button>
        <button onClick={() => {
            history.go(-2);
        }}>go home
        </button>
    </h1>
));

答案 2 :(得分:0)

对于我来说,弄清楚应用程序的去向是最好的方法,就是简单地使用React Router Link中的state属性。

This article关于如何将状态从Link传递到组件,确实有助于解释如何使用Link状态。

基本上,Link可以将state属性传递给呈现的组件。

<Link to={{ pathname: "/courses", state: { fromDashboard: true } }} />

渲染的组件然后通过props.location.state

访问状态

这与将道具传递到生成链接的组件一起解决了我的问题! (^ __ ^)