Значення props за замовчуванням
Коротка відповідь
У React можна задати значення props за замовчуванням двома основними способами:
- Через деструктуризацію (сучасний і рекомендований спосіб)
- Через
defaultProps(застарілий, але все ще працює для класів)
1. Сучасний спосіб - через деструктуризацію
Ти просто вказуєш значення за замовчуванням при отриманні props:
function Greeting({ name = "Гість" }) {
return <h1>Привіт, {name}!</h1>;
}Використання:
<Greeting name="Тім" /> // Привіт, Тім!
<Greeting /> // Привіт, Гість!React підставить "Гість", якщо name не було передано (або undefined).
Працює тільки при відсутності значення - якщо name={null}, значення за замовчуванням не підставиться.
2. Старий спосіб - через defaultProps
Раніше використовувався для класів і функціональних компонентів до появи хуків:
function Greeting({ name }) {
return <h1>Привіт, {name}!</h1>;
}
Greeting.defaultProps = {
name: "Гість",
};Використання:
<Greeting /> // Привіт, Гість!
<Greeting name="Марія" /> // Привіт, Марія!Починаючи з React 17, defaultProps офіційно не рекомендується
для функціональних компонентів - краще використовувати деструктуризацію.
Але він все ще працює для класів:
class Greeting extends React.Component {
static defaultProps = {
name: "Гість",
};
render() {
return <h1>Привіт, {this.props.name}!</h1>;
}
}3. Через логічне "АБО" (альтернативний прийом)
Іноді можна задати значення прямо в JSX:
function Greeting({ name }) {
return <h1>Привіт, {name || "Гість"}!</h1>;
}Але цей спосіб підставить
"Гість"навіть якщоname = ""або0, тому не завжди підходить (іноді це небажана поведінка).
4. Комбінований приклад
function Profile({ name = "Без імені", age = 18, country = "Не вказано" }) {
return (
<div>
<p>Ім'я: {name}</p>
<p>Вік: {age}</p>
<p>Країна: {country}</p>
</div>
);
}Використання:
<Profile name="Тім" />
// Ім'я: Тім
// Вік: 18
// Країна: Не вказаноПідсумок
| Спосіб | Приклад | Рекомендується |
|---|---|---|
| Через деструктуризацію | function Comp({ prop = "default" }) {} | Сучасний стандарт |
Через defaultProps | Comp.defaultProps = { prop: "default" } | Тільки для класів |
| Через ` | ` |
Головна думка:
У сучасних React-застосунках краще за все задавати значення
propsза замовчуванням прямо в деструктуризації параметрів функції:javascriptfunction Button({ color = "blue", size = "medium" }) { return <button className={`${color} ${size}`}>Кнопка</button>; }
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.