如何在我自己的高阶组件 (HOC) 中使用 React Router 的 withRouter HOC?

2023-12-19

我有一个更高阶的组件,它使用location.searchReact Router 提供的 prop 用来构造一个queryParams对象并将其作为 prop 传递给其包装的组件。

function withQueryParams(WrappedComponent) {
    return (props) => {
        const queryParams = myUtils.parseParams(props.location.search); // props.location provided by React Router
        const newProps = {
            ...props,
            queryParams: queryParams
        }

        return <WrappedComponent {...newProps} />
    }
}

export default withQueryParams

我会这样使用它:

class MyComponent extends React.Component { ... }

export default withQueryParams(MyComponent)

当然我会包装MyComponent在路线中:

<Route path="/mycomponent" component={MyComponent} />

但回到我的withQueryParamsHOC,我想确保props.location始终可用,这意味着我希望它始终拥有来自 React Router 的 props。进入withRouter,它本身就是 React Router 提供的 HOC,您可以使用它来使这些 props 可用。

最好的使用方法是什么withRouter在我里面withQueryParamsHOC 确保props.location有空吗?

Thanks.


您可以使用两个 HOC 来包装您的组件,即withRouter and withQueryParams。您可以使用重组 https://github.com/acdlite/recompose用这些 HOC 包装您的组件。我为此创建了一个沙箱。https://codesandbox.io/s/y493w29lz https://codesandbox.io/s/y493w29lz

首先,点击https://y493w29lz.codesandbox.io/main https://y493w29lz.codesandbox.io/main。这将在屏幕上显示以下输出。

MainComponent
SubComponent
"No Query Params available"

现在,尝试传递查询参数,例如https://y493w29lz.codesandbox.io/main?query=hello https://y493w29lz.codesandbox.io/main?query=hello。您可以看到查询参数打印在屏幕上。

MainComponent
SubComponent
Query Params = {"query":"hello"}

在这里,组件SubComponent不是由Route但它正在接收查询参数,因为我们使用以下方法包装了该组件withRouter and withQueryParms HOCs.

export const SubComponent = compose(
  withRouter,
  withQueryParams
)(SubComponentView);

现在,如果您渲染SubComponent只需点击 URLhttps://y493w29lz.codesandbox.io/sub?query=hello https://y493w29lz.codesandbox.io/sub?query=hello。它将显示以下输出。

SubComponent
Query Params = {"query":"hello"}

希望这能回答您的问题。 :)

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

如何在我自己的高阶组件 (HOC) 中使用 React Router 的 withRouter HOC? 的相关文章

随机推荐

  • EF Code First 迁移创建额外的外键

    我正在尝试创建一个Profile表与 Asp Net Identity 表集成 AspNetUsers 我正在将 Code First 迁移与 EF 6 0 结合使用 这是我的用户类 public class ApplicationUser
  • 'kABPersonAddressStreetKey' 在 iOS 9.0 中已弃用:使用 CNPostalAddress.street

    我用早期版本的 Swift 编写了以下类 这Swift 2编译器警告说 kABPersonAddressStreetKey 已被弃用iOS 9 0 use CNPostalAddress street 并给出错误 找不到接受类型 MKPla
  • 如何将 WordPress 帖子水平显示为 3 列?

    我正在将使用 Bootstrap 构建的主题集成到 WordPress 中 现在我面临着水平而不是垂直显示我的帖子的挑战 该设计使用了 3 根柱子 本站发布的两列的解决方案 http perishablepress com two colu
  • 如何计算分位数中的观测值数量?

    考虑一下我有一百万个遵循参数为 3 5 的伽马分布的观测值 我可以使用找到分位数summary 但我想找出被分成 10 块的每条红线之间有多少个观察值 a rgamma 1e6 shape 3 rate 5 summary a Min 1s
  • java小程序中的淡入淡出效果

    我正在用节点和边制作这个java小程序图形 我想实现点击一个节点时检索新节点的淡入和淡出效果 但我不知道如何编写和实现代码 为了澄清 例如动物节点检索老虎和狮子节点 因此 当单击动物时 节点和附着在其上的边缘逐渐消失 老虎和狮子节点逐渐出现
  • 如何将日期范围选择器与ajax一起使用

    我正在使用日期范围选择器 javascript 库来选择用户的日期范围 date range daterangepicker arrows true dateFormat d M yy rangeSplitter to datepicker
  • Phonegap Windows Phone 7 使用 jQuery 动态 HTML 加载和跨域调用

    好吧 我搜索了很多 发现很多 Android 开发者都使用 Phonegap 有几个问题 如何使用 jQuery 将本地 HTML 文件加载到 Phonegap 中的 div 中 就像是 contentDiv load url functi
  • Openlayers v4.0.1 支持 Google 地图 Javascript API 吗?

    我想知道 Openlayers 的最新版本 v4 0 1 是否支持 Google 地图作为图块图层 我找不到任何关于此的文档 如果 Openlayers 不支持 Google 地图 有人可以告诉我是否有任何方法可以做到这一点 OpenLay
  • 如何在 F# 或任何函数式语言中柯里化第二个(或第三个、第四个……)参数?

    我刚刚开始使用 F 看看如何使用柯里化将第一个参数预加载到函数中 但是如何使用第二个 第三个或任何其他参数来做到这一点呢 命名参数会让这变得更容易吗 是否有任何其他函数式语言具有命名参数或其他方式使柯里化与参数顺序无关 通常你只使用 lam
  • jQuery ajax() URL 是必需的吗?

    the ajax函数的 http api jquery com jQuery ajax jQuery ajax url settings标题是 jQuery ajax url settings 文档说 URL 是必需的 为什么在示例中只提供
  • 如何清除图表 tkinter

    有了这段代码 我想制作动态图 我想让我的图每 60 秒清晰一次 但我不能让它与 cla 和 clf 一起工作 有什么问题吗 除了使用 cla 和 clf 之外 还有其他方法可以清除图形吗 import lib client paho mqt
  • 数组和对象中的尾随逗号是规范的一部分吗?

    尾随逗号是 JavaScript 中的标准吗 还是大多数浏览器 例如 Chrome 和 Firefox 都容忍它们 我以为它们是标准的 但 IE8 遇到一个就吐了 当然 IE 不支持某些东西并不意味着它不标准 这是我的意思的一个例子 在 b
  • 即使 png 文件位于资源文件夹中,NSImage 也会返回 nil

    我正在尝试使用 NSImage imageNamed 方法加载图像 但没有成功 我已将图像复制到项目文件夹 项目 gt 资源中 并使用以下命令添加到项目中 将文件添加到项目 NSImage image NSImage imageNamed
  • jquery定时改变item类

    是否可以根据某种类型的计时器更改项目类别或 ID 每隔 1500 毫秒 它会转到嘿 那里 1 然后 1500 毫秒后 嘿 那里 2 等等 我可以控制它经历多少个间隔 嘿 嘿 那里 1 嘿 那里 2 嘿 那里 3 回到开头 嘿那里 etc T
  • 用弹簧配置流口水。 xsd 错误

    我正在尝试使用 Drools 创建 spring roo 应用程序 但我在 applicationContext xml 中遇到了错误 Error 在这一行找到多个注释 无法找到模式命名空间 http drools org schema 的
  • 相机意图仅在某些设备上返回 null

    我正在使用相机捕获图像并将返回的位图设置为图像视图 但它在 OnePlus 设备上崩溃 我检查了一些 htc 设备 它运行良好 我检查了解决方案 他们说要检查请求代码 但我已经在这样做了 这里可能有什么问题 这是代码 imageView s
  • `modularity()` 的正确使用和解释

    In the igraph modularity部分有示例代码 如下所示 g lt graph full 5 du graph full 5 du graph full 5 g lt add edges g c 1 6 1 11 6 11
  • 使用 Splinter 发送密钥

    我想使用 Splinter 测试自动完成框 我需要将 向下 和 输入 键发送到浏览器 但我在执行此操作时遇到了困难 我目前正在找到一个输入框并成功在该框中输入 tes context browser find by xpath some x
  • 链接自注册的抽象工厂

    我一直在使用和测试一个基于此处描述的自注册抽象工厂 https stackoverflow com a 582456 https stackoverflow com a 582456 在我所有的测试用例中 它就像一个魅力 并提供了我想要的功
  • 如何在我自己的高阶组件 (HOC) 中使用 React Router 的 withRouter HOC?

    我有一个更高阶的组件 它使用location searchReact Router 提供的 prop 用来构造一个queryParams对象并将其作为 prop 传递给其包装的组件 function withQueryParams Wrap