gpt4 book ai didi

javascript - 如何在 React.memo 中使用 Props 和泛型

转载 作者:行者123 更新时间:2023-12-03 07:18:27 41 4
gpt4 key购买 nike

我正在尝试将以下内容转换为使用 React.memo :

interface Props<TRowData> {
// props...
}

export function Table<TRowData>({
propA,
propB
}: Props<TRowData>) {

}

像这样(不正确):
interface Props<TRowData> {
// props...
}



export const Table = memo<Props<TRowData>>(
({
propA,
propB
}) => {

})

如何更正此语法?目前它有这个错误:
// Cannot find name 'TRowData'.
export const Table = memo<Props<TRowData>>(
~~~~~~~~

最佳答案

使用当前的 React 类型声明,无法从 React.memo 创建通用组件.没有类型断言的解决方案是添加一个额外的 memo 函数重载以利用 TS 3.4 higher order function type inference :

import React, { memo } from "react"

declare module "react" { // augment React types
function memo<A, B>(Component: (props: A) => B): (props: A) => ReactElement | null
// return type is same as ReturnType<ExoticComponent<any>>
}

然后你就可以制作 Table组件通用。只需确保将通用函数传递给 memo :
interface Props<T> {
a: T
}

const TableWrapped = <T extends {}>(props: Props<T>) => <div>{props.a}</div>

const Table = memo(TableWrapped)

const App = () => (
<>
<Table a="foo" /> {/* (props: Props<string>) => ... */}
<Table a={3} /> {/* (props: Props<number>) => ... */}
</>
)

Playground

关于javascript - 如何在 React.memo 中使用 Props 和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60386614/

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