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

React router不会在历史记录更改时呈现新组件

景轶
2023-03-14

所以基本上,当我尝试从其中一个路由更改路由时,我调用this.props.history.push('/newPath')。浏览器url的变化,但是新的路径没有得到匹配(我假设),因为渲染功能的相同组件被调用,没有什么变化。.

指数带路由器的tsx:

import * as React from 'react';
import * as ReactDOM from "react-dom";
import { Router, Route } from 'react-router-dom';
import { createStore, applyMiddleware } from 'redux';
import { Provider } from 'react-redux';
import thunk from 'redux-thunk';
import history from '../services/history.js';

import rootReducer from '../reducers';

import Browse from './browse';
import ShopItem from './shop-item';

import * as Styles from './index.scss';

const BrowserContainer = () => {
  const initialState: any = {
    items: window.preloadedData.items || []
  };
  const middlewares = [thunk];
  const store = createStore(rootReducer, initialState, 
applyMiddleware(...middlewares));

  return (
    <Provider store={ store }>
      <Router history={ history }>
        <div className={ Styles['container'] }>
          <Route exact path="/item/:id" component={ ShopItem } />
          <Route exact path="/home" component={ Browse } />
        </div>
      </Router>
    </Provider>
  );
};

ReactDOM.render(
  <BrowserContainer />,
  document.getElementById("root")
);

我尝试从中导航的组件使用connect函数连接到redux存储。我曾尝试将其包装到withRouter()HOC中并删除连接,但没有成功。我正在调用以更改路线的函数:

getItemAndNavigate(id: string) {
  this.props.history.push(`/item/${id}`);
}

版本:“历史记录”:“^4.7.2”,“反应路由器dom”:“^4.2.2”

共有1个答案

吕修筠
2023-03-14

你需要使用这个。上下文路由器。历史按。在Chrome中检查调试器。他们升级到了版本4。这是对以前版本的完全重写。如果你需要更多的帮助,请告诉我。设置断点以查看返回的内容。此外,

编辑:我犯了一个错误,使用了这个。道具。路由器。历史记录,它应该使用上下文并使用BrowserContainer。contextTypes={router:PropTypes.object};

 类似资料:
  • 问题内容: 我要说的是今天要学习react和redux,但是我不知道如何在状态更改后强制组件重新渲染。 这是我的代码: 我可以触发更新的唯一方法是使用 在构造函数内部,以便我手动触发组件的更新状态以强制重新渲染。 但是如何链接存储状态和组件状态? 问题答案: 仅当组件的状态或道具发生更改时,组件才会重新渲染。您不是依靠this.state或this.props,而是直接在render函数中获取存储

  • 问题内容: 我有一段代码 单击“ Hi”消息时,仅组件会继续重新渲染,而组件不会重新渲染。 为什么在状态更改时不重新渲染组件? 我想说,由于它是组件的一个属性而不会发生,但是仍然会被JSX中的组件评估,所以不确定。 完整示例https://codesandbox.io/s/529lq0rv2n(检查控制台日志) 问题答案: 这个问题已经很老了,但是由于您似乎没有得到满意的答案,因此我也会尝试一下。

  • 问题内容: 有没有一种方法可以使用raw_input而不在读取行历史记录中留下符号,从而在制表符完成时不显示它? 问题答案: 你可以使一个函数像 并调用该函数而不是raw_input。您可能不需要负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. 同步的文件历史记录 微力同步记录对文件的添加,修改、删除的操作记录,通过历史记录列表可查看时间时间及发生设备,如下: 事件时间,显示添加、修改、删除等操作发生的时间; 文件时间,显示该文件的最后修改时间; 操作类型,显示此次针对该文件所进行的操作的类型; 发生设备,显示进行此操作的设备名称; 目录,显示该文件所属同步目录; 清空历史记录,点击后可清除所有记录,此操作仅清除记录而已