gpt4 book ai didi

reactjs - 使用 react-router-dom 在组件基础上键入 location.state 属性

转载 作者:行者123 更新时间:2023-12-04 00:59:57 28 4
gpt4 key购买 nike

我想定义某个无状态组件的 location.state 可以是什么类型。我找到了几篇构建在 RouteComponentProps 类型上的文章,但我无法弄清楚细节。

假设在此示例中,我希望 location.state 属性的类型为

type StateType = {
id: number,
type: number
}

或者让 type` 甚至是一个枚举。可以实现吗?

import React from 'react';
import { withRouter, RouteComponentProps } from 'react-router-dom';
const Index = ({ location, history }) => {
return (
<div>Test</div>
)
}

export default withRouter(Index)

最佳答案

输入 RouteComponentPropsreact-router是泛型。这是您可以使用自定义类型定义位置状态的方式(我修改了您的示例):

import React from 'react';
import { withRouter, RouteComponentProps } from 'react-router-dom';

type StateType = {
id: number,
type: number
}

type IndexProps = RouteComponentProps<{}, {}, StateType>;

const Index: React.FC<IndexProps> = ({ location, history }) => {
return (
<div>{location.state && (
<ul>
<li>{location.state.id}</li>
<li>{location.state.type}</li>
</ul>
)}</div>
);
}

export default withRouter(Index);

一些要点:

  • 你应该经常检查是否location.state已定义,可能会发生状态由于任何原因未通过
  • 我们必须通过 React.FC 向组件本身添加正确的类型通用类型(不过,还有其他方法可以做到这一点...)
  • RouteComponentProps 实际上得到三种类型被正确定义:
  • location对象也可以在 history.location 中找到, 但它不是键入的,不应该使用,如 stated in documentation :

    ... The history object is mutable. Therefore it is recommended to access the location from the render props of <Route>, not from history.location. ...

关于reactjs - 使用 react-router-dom 在组件基础上键入 location.state 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59160131/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com