typescript组件中的默认属性
本文最后更新于:2024年3月18日 下午
我们经常会使用到默认参数,例如:
int sum(int a, int b = 1){
return a+b;
}
而在前端的 js/ts 中组件也有 默认属性 的概念。 javascript 的默认属性比较容易实现,与 c++ 等类似。
// 以下js的默认属性实现代码参考react官网
import { getImageUrl } from './utils.js';
function Avatar({ person, size=50 }) {
return (
<img
className="avatar"
src={getImageUrl(person)}
alt={person.name}
width={size}
height={size}
/>
);
}
export default function Profile() {
return (
<div>
<Avatar
size={100}
person={{
name: 'Katsuko Saruhashi',
imageId: 'YfeOqp2'
}}
/>
<Avatar
size={80}
person={{
name: 'Aklilu Lemma',
imageId: 'OKS67lh'
}}
/>
<Avatar
person={{
name: 'Lin Lanying',
imageId: '1bX5QH6'
}}
/>
</div>
);
}
但是由于 typescript 对类型的严格限制等原因, 网上有不少对其默认属性的实现,但是基本采用了 interface 实现,代码较为复杂。
Default Props in React/TypeScript 这篇文章对 typescript 中的默认属性的实现进行了十分详细的讨论。
这里我介绍一种默认属性的实现方法,较为简单,目前也未出现问题。
// 第一种方法
const Square = (props : {value ?: string}) => {
return <button className="square">{props.value ? props.value : "No" }</button>
}
// 第二种方法
const Square = (props : {value ?: string}) => {
const {value = "no"} = props
return <button className="square">{value}</button>
}