繁体   English   中英

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

[英]How to access route params from react-router-dom using Typescript? Ex: `/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>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM