如何使用 Typescript 从 react-router-dom 访问路由参数?例如:`/some-route/:slug`

开发者

以这个带有路由参数的示例路由为例slug

ROUTES.ts

export const SOME_ROUTE = `/some-route/:slug`;

而这个<Switch>将呈现<Route>组件

AllRoutes.tsx

import React from "react";
import * as ROUTES from "@routes/ROUTES";

interface AllRoutes {  
}

const AllRoutes: React.FC<AllRoutes> = (props) => {
  console.log("Rendering AllRoutes...");

  return(
    <Switch>
      <Route exact path={ROUTES.SOME_ROUTE} component={MyComponent}/>
    </Switch>
  );
};

export default AllRoutes;

现在从渲染的组件:

我的组件.tsx

import React from "react";
import HomePage from "./HomePage";
import { RouteComponentProps } from "react-router-dom";

interface MyComponent extends RouteComponentProps {
}

const MyComponent: React.FC<MyComponent> = (props) => {
  console.log("Rendering MyComponent...");

  console.log(props.match.params.slug);  // TRYING TO ACCESS THE `:slug` ROUTE PARAM

  return(
    <HomePage/>
  );
};

export default MyComponent;

问题

我收到一条错误消息,指出该slug属性不存在。即使它 100% 存在,因为值会被记录。但是 Typescript 并不知道。

我是否需要手动扩展RouteComponentProps以添加该props.match.params.slug属性?

在此处输入图片说明

routePropshistorymatchlocation)都存在,你可以从下面的图片中看到。

在此处输入图片说明

开发者

在评论和这些其他内容的帮助下:

这是我的做法:

import React from "react";
import HomePage from "./HomePage";
import { RouteComponentProps } from "react-router-dom";

interface RouteParams {
  slug: string
}

interface MyComponent extends RouteComponentProps<RouteParams> {
}

const MyComponent: React.FC<MyComponent> = (props) => {
  console.log("Rendering MyComponent...");

  console.log(props.match.params.slug);

  return(
    <HomePage/>
  );
};

export default MyComponent;

使用参数()

并且还使用useParams()钩子:

interface RouteParams {
  slug: string
}

const params = useParams<RouteParams>();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 React-router-dom 版本 6 useNavigate 和 typescript 传递参数

如何在 Typescript 中从 react-router-dom 键入 StaticRouterContext?

如何在React Router Dom中使用嵌套路由

如何使用 react-router-dom 创建动态路由?

如何在使用中发送参数React Router Dom的历史?

React-router-dom 和 TypeScript

使用react-router-dom(<Route>)将var从->传递到React中的功能组件

如何使用带有typescript的react router dom导航到新页面

如何在React Router DOM中使用Regex从路由匹配中排除参数?

如何使用react-intl,react-router-dom v4和TypeScript对React组件进行单元测试

如何将字符串作为函数传递给react-router-dom Route?

无法访问用作 Route 中元素的组件中的子项(react-router-dom 6.3.0)

使用React Redux Router,我应该如何访问路由状态?

React/Typescript 条件路由 - 从 React Router Dom v5 更新到 v6

React Router Dom嵌套路由,或者如何传递

路由未使用react-router-dom呈现

无法使用 switch 语句渲染路由 React router dom 5.0.0

如何在react-router-dom Link中传递参数?

如何防止react-router-dom嵌套路由与路由参数混淆

当使用路由渲染道具而不是路由组件道具时,如何访问 react-router-dom 4 中的 url args?

如何使用React Router的route参数发出axios请求,然后根据响应更新状态?

如何使用React正确设置react-router-dom链接

如何使用react-router-dom添加将渲染组件的路由?

使用react-router-dom时如何通过路由传递forwardRef

如何在 react-router-dom@v6 中使用私有路由

react-router-dom和Typescript不显示组件

如何在没有 <Link> 标签的情况下使用 react-router-dom 发送参数

如何将组件名称从另一个组件的对象传递到React Router Dom中的Route?

React-router-dom-相同的路由问题