React Router v4 NavLink 活动路由

2024-04-29

我正在尝试使用 v3 移植我的项目react-router到现在所谓的 v4react-router-dom。现在,当我有一个 MenuBar 组件时,问题就出现了,该组件与路由逻辑完全分开(如您所期望的),因为无论当前路径是什么,它都会显示完全相同的链接。现在这在 v3 中工作得很好,但是现在当我使用时NavLink,其中有相同的activeClassName属性时,活动路线不会在导航栏上更新,仅在刷新时更新。这看起来有点愚蠢,所以必须有办法解决这个问题。

export default @inject('ui') @observer class App extends Component {
  render() {
    return (
      <Router>
        <div className={ styles.wrapper }>
          <Sidebar />
          <main className={ `${styles.main} ${!this.props.ui.menuOpen && styles.closed}` }>
            <Route exact path="/" component={ HomePage } />
            <Route path="/signup" component={ SignUpPage } />
            <Route path="/login" component={ LoginPage } />
            <Route path="/about" component={ AboutPage } />
          </main>
          <footer className="site-footer"></footer>
        </div>
      </Router>
    );
  }
}

上面是我的主要应用程序逻辑,正如您所看到的,路由是嵌套的,但路由器本身包围了整个组件。

我应该添加什么才能让它们再次工作? (它们在页面刷新时可以正常工作)


根据您的使用情况@observer装饰器,看来您正在使用mobx-react。需要了解的事情observer是它实现了shouldComponentUpdate以优化渲染性能。那sCUcall 会查看当前和下一个 props,如果没有差异,则不会重新渲染。这是一个问题,因为默认情况下,React Router 使用上下文来传递数据并依赖元素重新渲染来获取更新的值,但是observer's sCU无法检测上下文变化。

解决这个问题的方法是通过location对象作为包装组件的道具observer。然后,当位置改变时,observer's shouldComponentUpdate将检测差异并重新渲染。

您可以看到阻止更新指南 https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/guides/blocked-updates.md了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Router v4 NavLink 活动路由 的相关文章

随机推荐

  • 增加字符串的最后一个字母

    这是我希望 Java 的 String 类有一个 ReplaceLast 方法的地方 但它没有 而且我的代码得到了错误的结果 我正在编写一个程序 该程序在数据结构中搜索与字符串前缀匹配的任何项目 但是 由于我使用的是迭代器 iter nex
  • Spring部署期间依赖注入问题

    我正在启动一个 Primefaces Spring Hibernate 项目 并且仍在学习如何正确处理这些组件 但就在此时 我面临着一个与 spring 依赖注入相关的问题 这让我很害怕 我已经在网上寻找答案两天了 但找不到我的代码有什么问
  • Groovy hasProperty/respondTo

    All the examples http mrhaki blogspot com 2009 10 groovy goodness check if method or html我看到使用hasProperty or respondsTo显
  • React Datepicker(无法获取输入值)

    我是反应新手 我需要使用反应日期选择器 https github com Hacker0x01 react datepicker 当我更改日期时 我想获取输入的值 如果我点击 2017 年 10 月 20 日 我想将 2017 年 10 月
  • 在 PLSQL Oracle 中抛出特定错误消息...在休眠中捕获?

    是否可以在 PL SQL oracle 存储过程中抛出特定的错误消息 并在调用它时在 Hibernate 中捕获它 您可以从 PL SQL 代码中抛出用户定义的错误消息 20000 到 20999 之间的错误代码保留用于用户指定的错误消息
  • 检查输入时出错:预期 conv2d_1_input 有 4 个维度,但得到形状为 (800, 1000) 的数组

    我正在尝试使用 CNN 进行情感分析 我的代码我的数据具有 1000 1000 形状 当我将数据传递给 convolution2D 时 它会抛出一个错误 我无法解决 我尝试了以下解决方案 但仍然面临问题 在构建 CNN 时 我收到 Kera
  • 在 PowerShell 中解析大型 JSON 文件

    Context 在这篇文章中 ConvertFrom Json 大文件 https stackoverflow com q 76784490 268581 我询问有关反序列化 1 2GB JSON 文件的问题 这个答案发布在那里 https
  • 如何在react-styleguidist中添加具有依赖项的示例组件

    我想记录一个ButtonGroup组件渲染Button其中使用 react styleguidist 的组件 我有一个 styleguidist webpack 配置 如下所示 module exports module rules tes
  • $(document).ready(function(){ 未捕获的 ReferenceError: $ 未定义

    您好 我在使用以下代码时遇到 未捕获的引用错误 未定义 目前我的日志中出现以下错误 我一直在查看框架中的示例 但似乎找不到错误在哪里 我已经有十多年没有做过任何 HTML 或 js 了 当时我所做的都是非常基本的东西 任何帮助 将不胜感激
  • Java的JConsole可以用来自动配置内存吗?

    我正在学习JavaJMX https docs oracle com javase tutorial jmx and JConsole http docs oracle com javase 7 docs technotes guides
  • 部署程序集:当前显示的页面包含无效值

    我从 Sourceforge 导入了一个 Java Web 应用程序 我花了三个工作周的时间来消除项目名称和包上附加的所有红叉 但现在我无法使该应用程序在我的 Eclipse 和 tomcat6 开发环境上运行 在项目属性中 当我尝试设置部
  • Eclipse JSP:默认文本文件编码不正确

    我有以下问题 我创建了一个新的 动态 Web 项目 并将一些现有的 jsp 文件导入其中 如果我右键单击导入的 jsp 文件之一 然后单击 属性 gt 资源 则在 文本文件编码 部分下 值为 默认 由内容类型确定 ISO 8859 1 不过
  • 带有图标和文本的 UITableViewRowAction

    有几个类似的问题 但我认为应该有一个针对 iOS 10 的最新答案 使用 Swift3 不使用私有 API 并且不依赖于将图标限制为 unicode表情符号 我现在有包含三个操作的表行 func tableView tableView UI
  • GSON 是一个 Java Throwable

    我有一个对象 其中包含一段数据和关联的异常 Public class MyBean Private String data Private Exception problem 当我尝试GSON toJSON 对象 它给了我一个循环引用抱怨
  • 如何让石斑鱼和轴一样长?

    对于我的作业 我应该使用 matplotlib 在地图上绘制 20 场飓风的轨迹 但是 当我运行我的代码时 出现错误 AssertionError Grouper and axis must be the same length 这是我的代
  • 从彩色背景中提取黑色对象

    人眼很容易辨别black来自其他颜色 但是计算机呢 我在普通的A4纸上打印了一些色块 由于组成彩色图像有青色 品红色和黄色三种墨水 所以我设置每个块的颜色C 20 C 30 C 40 C 50 以及其余两种颜色是 0 这是我的源图像的第一列
  • sprintf 风格字符串格式化的起源

    字符串格式化概念见sprintf如今几乎可以在任何语言中找到 你知道 用 s d f 等掩盖字符串 并提供变量列表来填充它们的位置 哪种语言最初具有提供此功能的库函数或语言结构 请指定某种来源参考以确认您的主张 以便我们避免纯粹的猜测或猜测
  • 使用 JavaScript 检查复选框时更改样式

    我正在尝试 没有成功 创建一个复选框 在选中时更改正文的某些样式属性 如下所示 我究竟做错了什么 提前致谢 您需要使用事件侦听器并在侦听器内运行该脚本 您在代码中所做的是在脚本运行时设置一次颜色 您没有告诉程序每次更改复选框时都进行检查 c
  • Java中的整数除法[重复]

    这个问题在这里已经有答案了 这感觉像是一个愚蠢的问题 但我在 Java 文档中找不到答案 如果我声明两个 int 然后将它们相除 到底发生了什么 他们是否转换为floats doubles首先 划分 然后投射回integer 或者除法是作为
  • React Router v4 NavLink 活动路由

    我正在尝试使用 v3 移植我的项目react router到现在所谓的 v4react router dom 现在 当我有一个 MenuBar 组件时 问题就出现了 该组件与路由逻辑完全分开 如您所期望的 因为无论当前路径是什么 它都会显示