[英]TS doesn't see default props in React function component
我的代碼
interface ButtonProps {
onClick?: () => void
}
const Button: FC<ButtonProps> = ({ onClick }) => {
const wrapClick = () => {
onClick() // TS2722: Cannot invoke an object which is possibly 'undefined'.
}
return <button onClick={wrapClick}>button</button>
}
Button.defaultProps = {
onClick: () => {},
}
在這種情況下,一切正常
const Button: FC<ButtonProps> = ({ onClick }) => {
const wrapClick = () => {
onClick && onClick()
}
return <button onClick={wrapClick}>button</button>
}
而在這個
const Button: FC<ButtonProps> = ({ onClick = () => {} }) => {
const wrapClick = () => {
onClick()
}
return <button onClick={wrapClick}>button</button>
}
有沒有辦法使用默認道具來解決這個問題? 因為我有很多屬性的大型組件。
props 對象中的 onClick 屬性使用問號標記為可選,所以我們不能直接調用該函數。
要解決此錯誤,請在調用函數時使用可選鏈接 (?.) 運算符。
import { FC } from "react";
interface ButtonProps {
onClick?: () => void;
}
const Button: FC<ButtonProps> = ({ onClick }) => {
const wrapClick = () => {
onClick?.();
};
return <button onClick={wrapClick}>button</button>;
};
Button.defaultProps = {
onClick: () => {}
};
export default Button;
使用非null
斷言運算符(后綴!
)讓 TypeScript 知道您的默認onClick(): void
is not null
/ undefined
(它認為這是因為IButtonProps.onClick: () => void | undefined
,它被使用按Button
( FC<IButtonProps>
, FC<T>.defaultProps
的類型是T & { children?: Node }
如果我沒記錯的話))。
interface IButtonProps {
onClick?: () => void; // No event args?
}
const Button: FC<IButtonProps> = (props) => {
const {
onClick = Button.defaultProps.onClick!,
} = props;
const wrapClick = (/* No event args? */) => {
onClick();
};
return <button onClick={wrapClick}>button</button>;
};
Button.defaultProps = {
onClick: () => {},
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.