当前位置: 首页 > 面试题库 >

如何在React Router v4中推送到历史记录?

袁建木
2023-03-14
问题内容

在当前版本的React
Router(v3)中,我可以接受服务器响应并用于browserHistory.push转到相应的响应页面。但是,这在v4中不可用,我不确定哪种适当的处理方式。

在此示例中,使用Redux,当用户提交表单时, components / app-product-form.js
调用this.props.addProduct(props)。服务器返回成功后,该用户将被带到“购物车”页面。

// actions/index.js
export function addProduct(props) {
  return dispatch =>
    axios.post(`${ROOT_URL}/cart`, props, config)
      .then(response => {
        dispatch({ type: types.AUTH_USER });
        localStorage.setItem('token', response.data.token);
        browserHistory.push('/cart'); // no longer in React Router V4
      });
}

如何从React Router v4的功能重定向到购物车页面?


问题答案:

您可以在history组件外部使用这些方法。通过以下方式尝试。

首先,history使用历史记录包创建一个对象:

// src/history.js

import { createBrowserHistory } from 'history';

export default createBrowserHistory();

然后将其包装<Router>请注意 ,您应该使用import { Router }而不是import { BrowserRouter as Router }):

// src/index.jsx

// ...
import { Router, Route, Link } from 'react-router-dom';
import history from './history';

ReactDOM.render(
  <Provider store={store}>
    <Router history={history}>
      <div>
        <ul>
          <li><Link to="/">Home</Link></li>
          <li><Link to="/login">Login</Link></li>
        </ul>
        <Route exact path="/" component={HomePage} />
        <Route path="/login" component={LoginPage} />
      </div>
    </Router>
  </Provider>,
  document.getElementById('root'),
);

从任何地方更改当前位置,例如:

// src/actions/userActionCreators.js

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

export function login(credentials) {
  return function (dispatch) {
    return loginRemotely(credentials)
      .then((response) => {
        // ...
        history.push('/');
      });
  };
}

UPD :您还可以在React Router FAQ中看到一个稍微不同的示例。



 类似资料:
  • 是否可以创建一个全局历史文件来管理react-router-dom v5上的createBrowser历史()?我知道V5有使用历史()作为获取历史的一种方式。但是有没有可能从任何地方检索历史记录,比如我没有使用函数组件的情况? 在V4上,我可以创建一个文件history.js: 它在V4上工作https://codesandbox.io/s/react-router-v4-nfwr0 它在V5上

  • 问题内容: 我正在开发一个AngularJS应用程序,该应用程序具有捕获所有路由(例如)的功能,这对于从该应用程序的先前(非角度)版本中支持旧版网址格式是必需的。响应捕获的控制器都尝试拉相关对象,如果找不到,则使用该方法重定向到404页面。这可以使用户进入404页面,但是当用户在其浏览器中进行回击时,会将他们带回到最初迫使他们进入404页面的页面,最终他们无法逃脱循环。 我的问题是,是否有1)更好

  • 读取播放历史信息 调用地址 http://api.bilibili.cn/history 返回 返回值字段 字段类型 字段说明 results int 返回的记录总数目 list object 返回数据 返回字段 “list” 子项 返回值字段 字段类型 字段说明 aid int 视频编号 typeid int 视频分类ID typename string 视频分类名称 title string

  • 历史记录 控制台维护 Elasticsearch 成功执行的最后500个请求列表。点击窗口右上角的时钟图标即可查看历史记录。这个图标会打开历史记录面板,您可以在其中查看历史请求。您也可以在这里选择一个请求,它将被添加到编辑器中当前光标所在的位置。 图 9. 历史记录面板

  • 3.3.1.1. 同步的文件历史记录 微力同步记录对文件的添加,修改、删除的操作记录,通过历史记录列表可查看时间时间及发生设备,如下: 事件时间,显示添加、修改、删除等操作发生的时间; 文件时间,显示该文件的最后修改时间; 操作类型,显示此次针对该文件所进行的操作的类型; 发生设备,显示进行此操作的设备名称; 目录,显示该文件所属同步目录; 清空历史记录,点击后可清除所有记录,此操作仅清除记录而已

  • 我有一个与Firebase云消息传递集成的iOS应用程序,可以从其中发送推送通知。我知道Firebase会保存所有已发送通知的历史记录。是否有办法让运行该应用程序的每个特定设备获取自己的已发送通知历史记录?我需要在客户端进行,而不是在服务器端。