当前位置: 首页 > 知识库问答 >
问题:

React路由器链接不会在自定义历史记录中保留状态

微生新翰
2023-03-14

在我的项目中,我使用React路由器DOM 5.2.0。我必须使用

沙盒上的例子

import { createBrowserHistory } from 'history';

const history = createBrowserHistory();

export default history;
js prettyprint-override">import {
  useParams,
  useRouteMatch,
} from 'react-router-dom';
import { useMemo } from 'react';

import history from './history';
import urlQueriesService from './urlQueriesService';

const useRouter = () => {
  const params = useParams();
  const match = useRouteMatch();
  const { location } = history;

  return useMemo(() => ({
    push: history.push,
    replace: history.replace,
    pathname: location?.pathname,

    query: {
      ...urlQueriesService.parse(location?.search),
      ...params,
    },

    match,
    location,
    history,
  }), [params, match, location, history]);
};

export default useRouter;
import React from 'react';
import {
  Route,
  Switch,
} from 'react-router-dom';

import useRouter from './useRouter';
import TestPage from './TestPage';
import TestComponent from './TestComponent';

const AppRoutes = () => {
  const { location } = useRouter();
  return (
    <Switch location={location}>
      <Route exact path="/page-1" component={Page1} />
      <Route exact path="/page-2" component={Page2} />
    </Switch>
  );
};

export default AppRoutes;
import history from './history';

<Router history={history}>
  <AppRoutes />
</Router>

这是基本设置Page1Page2是交叉链接组件,如下所示:

import React from 'react';
import { Link } from 'react-router-dom';

import useRouter from './useRouter';

const Page1 = () => {
  const { location } = useRouter();

  return (
    <div>
      <h1>Test</h1>

      <div>
        <Link to={{ pathname: '/page-2', state: { prevUrl: location.pathname }}}>Stateful component</Link>
      </div>
    </div>
  );
};

export default Page1;

这里的关键部分是链接组件,它具有属性,对象作为值。在这个对象中,我定义了状态:{prevUrl:location.pathname},但是当我试图在Page2中访问它时,这个状态总是null。有趣的是,如果我改变

  • Mac OS 11.4大苏尔
  • 节点12.16.2
  • NPM 6.14.11
  • 反应16.13.1
  • 反应路由器dom 5.2.0

共有1个答案

叶衡虑
2023-03-14

多亏了这篇文章,我才找到了答案https://stackoverflow.com/a/62583930/8080990

降级到historyversion4,它就完美了!

沙盒

 类似资料:
  • 问题内容: 有没有一种方法可以使用raw_input而不在读取行历史记录中留下符号,从而在制表符完成时不显示它? 问题答案: 你可以使一个函数像 并调用该函数而不是raw_input。您可能不需要负1,具体取决于您从何处调用它。

  • 似乎有一些关于使用什么的混淆:

  • 单击任何NavLink或Link后,它总是打开PageNotFound组件。

  • 我有一个使用React,React路由器Dom(RRD),Redux和Typecript的项目。默认情况下,RRD将和道具传递给我在路由组件道具中定义的子组件(见下文)。在我的组件中,Redux还向我的组件添加了两个道具,一个函数(getPlaylist)和一个对象(auth)。 在我的组件中,当我输入所有道具时,我在输入和时遇到问题。 我尝试了以下方法,但没有成功: 添加了自定义道具的Route

  • 我在从React路由器v3迁移到v4时遇到了一些小问题。在v3中,我可以在任何地方执行此操作: 如何在v4中实现这一点。 我知道,当您在组件中时,我可以使用hoc、react context或event router道具。但我不是这样。 我正在寻找v4中组件的外部导航的等价性

  • 问题内容: 我正在从本教程中学习,但始终收到此错误: “ react-router”不包含名为“ browserHistory”的导出。 具有react-router的文件是这样的: 问题答案: 您现在需要从历史记录模块中获取。 请注意,他们最近更改了模块API,因此,如果您使用的是最新版本,则导入会稍有变化: