历史上的 React Router RouteParams

Posted

技术标签:

【中文标题】历史上的 React Router RouteParams【英文标题】:React Router RouteParams in history 【发布时间】:2021-10-24 10:58:09 【问题描述】:

我正在使用 react 17.0.2 并已定义如下路线:

export const PATH = 
  editProduct: '/edit-product/:productId'

export const routes = [
  
    path: PATH.editProduct,
    render: (props) => <Product ...props/>
  
]
export const useRoutes = () => ( PATH, routes );

路由随后与 'react-router-dom' 版本一起使用:^5.2.0

之前一些没有 routeparams 的路径使用history.push(PATH.somePath); 并且它可以工作,但我想在某些组件中使用 react routerParams。

喜欢:

history.push(pathname: PATH.editProduct, routerParam: productId: "2" );

以前的带有 routeparams 的路径已通过不使用 PATH 变量传递,而是键入 history.push('/edit-product/' + productId); 之类的字符串我想重用 PATH 变量,但我不知道如何巧妙地实现它。

如果我在 history.push 方法中使用 PATH.editProduct,它会将 routeparam 与它一起放置,就像 /edit-product/:productId 一样,这不是我正在寻找的行为。 routeparams 历史上有解析方法吗?

【问题讨论】:

【参考方案1】:

react-router-dom中有generatePath util。

import  generatePath  from "react-router-dom";

const path = generatePath(PATH.editProduct, 
  productId: 1
);

history.push(path);

https://reactrouter.com/web/api/generatePath

【讨论】:

以上是关于历史上的 React Router RouteParams的主要内容,如果未能解决你的问题,请参考以下文章

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

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

[react-router] React-Router怎么获取历史对象?

react-router,道具“历史”未定义

使用 react-router-dom,如何从 React 组件外部访问浏览器历史对象?

react-router 无法解析模块历史,缺少 lib 文件夹