Thu*_*San 9 generics memo typescript reactjs
有没有办法在 React.memo 中设置新的泛型?
例如,对于类组件,我可以使用
// set generic
class GenericClass<G extends string | number> extends PureComponent {}
// and use like this
<GenericClass<number> />
Run Code Online (Sandbox Code Playgroud)
在下面的场景中,我想让 G 型泛型。
type G = string;
const MemoComponent = memo<{ value: G; onValueChange: (newValue: G) => void }>(
({ value, onValueChange }) => {
return (
<select
onClick={() => {
// do calculation
onValueChange(value);
}}
>
Button
</button>
);
}
);
Run Code Online (Sandbox Code Playgroud)
我想知道有没有办法在 React.memo 中设置泛型?例如,像下面
const MemoComponent = <G extends string | number | object>React.memo<{value: G}>(({value}) => component)
// and use like this
<MemoComponent<number> />
Run Code Online (Sandbox Code Playgroud)
小智 32
您可以编写自己的包装器而不使用类型断言(as):
const genericMemo: <T>(component: T) => T = memo
function GenericComponent<Value>({props: PropsWithGeneric<Value>}) {
return <div />
}
export const GenericMemoComponent = genericMemo(GenericComponent)
Run Code Online (Sandbox Code Playgroud)
Raf*_*cio 23
我有同样的问题并像这样解决了。
interface ISomeComponentWithGenericsProps<T> { value: T; }
function SomeComponentWithGenerics<T>(props: ISomeComponentWithGenericsProps<T>) {
return <span>{props.value}</span>;
}
export default React.memo(SomeComponentWithGenerics) as typeof SomeComponentWithGenerics;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5320 次 |
| 最近记录: |