Fab*_*ice 5 typescript reactjs typescript-typings typescript2.0
我有一个无状态功能组件,带有一个可选的函数参数作为属性(onClick),我试图将一个空函数定义为默认属性,以便能够在我的组件中安全地执行:
<span onClick={props.onClick} />
Run Code Online (Sandbox Code Playgroud)
但我有以下错误:"表达预期."
interface IProps {
size?: sizeType;
onClick?: (e:any) => void;
}
const Foo: React.SFC = (props: IProps) => {
// ...
};
const defaultProps: IProps = {
size: 'default',
onClick: () => void <-- Expression expected.
};
Foo = defaultProps;
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
小智 13
您不能void在javascript中使用返回值.而不是void,null用作返回值.
onClick: () => null
Run Code Online (Sandbox Code Playgroud)
您可以使用以下内容:
const defaultProps: IProps = {
size: 'default',
onClick: () => void(0)
};
Run Code Online (Sandbox Code Playgroud)
小智 6
我认为使用 lodashes noop 可能是一个不错的选择,因为根据组件在访问 prop 之前重新渲染的次数,它将创建对匿名函数的许多引用,该函数本质上是一个占位符您需要的功能。就像是:
import noop from 'lodash/noop';
MyComponent.defaultProps = {
myfunc: noop,
};
Run Code Online (Sandbox Code Playgroud)
这是一个小的优化,但也阻止开发人员为每个需要 func 的默认 prop 声明创建匿名函数。