export interface IconProps {
type: string;
className?: string;
title?: string;
onClick?: React.MouseEventHandler<any>;
spin?: boolean;
style?: React.CSSProperties;
}
const Icon = (props: IconProps) => {
const {type, className = '', spin} = props;
const classString = classNames({
anticon: true,
'anticon-spin': !!spin || type === 'loading',
[`anticon-${type}`]: true,
}, className);
return <i {...omit(props, ['type', 'spin'])} className={classString}/>;
};
export default Icon;
这是里面最简单的Icon的组件源码,在看到!!spin 这里。不理解为什么要用!!spin 这样来写。一开始认为是如果spin没有传入的话,那么这个值就是undefined,所以需要用!undefined 来转为boolean类型,但是后来自己测试了下 undefined 默认是false的,好像并没有影响结果。希望哪位可以解惑下。
因为在其他组件里面好多都是这样写的额
JavaScript是一门弱类型的语言,但是,在使用中有时需要强制转化为相应的类型。所以,!!() ,这种写法有将弱类型转化为强类型的作用