我在使用 forwardRef 时无法进行类型检查。我的代码如下:
成分:
export interface Props {
label?: string;
callback: () => void;
}
export const _Button = (props: Props) => {
return (
<div>
<p>test</p>
</div>
);
};
export const Button = React.forwardRef((props, ref) => {
return <_Button { ...props } forwarded={ref} />
});
组件使用:
export const App = () => {
return (
<div>
<h1>Application</h1>
<Button label="foo" />
</div>
);
};
您可以看到我没有传递所需的回调道具,但打字稿没有发现问题。以下是我尝试过的,但仍然无法进行类型检查。
export interface Props {
label?: string;
callback: () => void;
}
export const _Button = (props: Props) => {
return (
<div>
<p>test</p>
</div>
);
};
export const Button = React.forwardRef<HTMLButtonElement, Props>((props: Props, ref) => {
return <_Button { ...props } forwarded={ref} />
});
任何帮助,将不胜感激。谢谢。
添加了对答案 1 和 2 的响应的图像。这是我期望的打字稿错误。
我假设你想做这样的事情:
import React, { FC, forwardRef, ForwardedRef, createRef } from 'react'
export interface Props {
label?: string;
callback: () => void;
forwardedRef: ForwardedRef<HTMLDivElement>
}
export const _Button: FC<Props> = (props: Props) => {
return (
<div ref={props.forwardedRef}>
<p>test</p>
</div>
);
};
export const Button = forwardRef<
HTMLDivElement,
Omit<Props, 'forwardedRef'>
>((props, ref) => <_Button {...props} forwardedRef={ref} />);
export const App = () => {
const ref = createRef<HTMLDivElement>();
return (
<div>
<h1>Application</h1>
<Button ref={ref} label="foo" callback={() => null} />
</div>
);
};
在这里您可以找到有关 refs 的文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句