# React技巧之设置具有默认值的可选props
原文链接:https://bobbyhadz.com/blog/react-optional-props-typescript (opens new window)
作者:Borislav Hadzhiev (opens new window)
正文从这开始~
# 总览
在React TypeScript中设置具有默认值的可选props
:
- 用问号将类型上的
props
标记为可选。 - 在函数定义中对
props
进行解构时提供默认值。
# 详情
// App.tsx
interface EmployeeProps {
name?: string; // 👈️ marked optional
age?: number; // 👈️ marked optional
country: string; // 👈️ required (no question mark)
}
function Employee({name = 'Alice', age = 30, country}: EmployeeProps) {
return (
<div>
<h2>{name}</h2>
<h2>{age}</h2>
<h2>{country}</h2>
</div>
);
}
export default function App() {
return (
<div>
<Employee name="Bob" age={29} country="Belgium" />
<hr />
<Employee country="Austria" />
</div>
);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
我们标记了name
和age
属性作为可选的。这意味着不管有没有提供这两个属性,组件都是可使用的。
如果可选prop
的值没有指定,会默认设置为undefined
。没有为prop
指定值,和设置值为undefined
的效果是相同的。
我们还在Employee
组件的定义中为name
和age
参数设置了默认值。
function Employee({name = 'Alice', age = 30, country}: EmployeeProps) {
return (
<div>
<h2>{name}</h2>
<h2>{age}</h2>
<h2>{country}</h2>
</div>
);
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
对象中的name
属性的默认值为Alice
,所以如果不提供name
prop,它将被赋值为Alice
。
你也可以通过把props
所有属性都标记为可选,来将整个props
对象设置为可选。
// App.tsx
interface EmployeeProps {
name?: string; // 👈️ all marked optional
age?: number;
country?: string;
}
function Employee({
name = 'Alice',
age = 30,
country = 'Austria',
}: EmployeeProps) {
return (
<div>
<h2>{name}</h2>
<h2>{age}</h2>
<h2>{country}</h2>
</div>
);
}
export default function App() {
return (
<div>
<Employee name="Bob" age={29} country="Belgium" />
<hr />
<Employee />
</div>
);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
EmployeeProps
类型中的所有属性都被标记为可选的,因此该组件可以在不提供任何props
的情况下使用。
我们为Employee
组件的所有props
设置了默认值,所以如果有任何props
被省略了,就会使用默认值。