Code Example 1: Props object
❓ Какой объект получит компонент UserCard внутри? Как props передаются при использовании компонента?
<UserCard name="Иван" age={25} isActive={true} />
Code Example 2: Basic props passing
❓ Как родительский компонент передаёт данные в дочерний? Как дочерний компонент получает эти данные?
function App() {
return (
<Greeting
name="Мария"
message="Добро пожаловать!"
/>
)
}
function Greeting(props) {
return (
<div>
<h1>{props.message}</h1>
<p>Привет, {props.name}!</p>
</div>
)
}
Code Example 3: Props destructuring
❓ В чём разница между этими тремя способами работы с props? Какой способ рекомендуется?
Without destructuring:
function Greeting(props) {
return (
<div>
<h1>{props.message}</h1>
<p>Привет, {props.name}!</p>
</div>
)
}
Destructuring inside:
function Greeting(props) {
const { name, message } = props
return (
<div>
<h1>{message}</h1>
<p>Привет, {name}!</p>
</div>
)
}
Destructuring in parameters:
function Greeting({ name, message }) {
return (
<div>
<h1>{message}</h1>
<p>Привет, {name}!</p>
</div>
)
}
Code Example 4: Default values
❓ Что произойдёт, если не передать variant и size при использовании Button? Какие значения будут использованы?
function Button({ variant = 'primary', size = 'medium', children }) {
return (
<button className={`btn btn-${variant} btn-${size}`}>
{children}
</button>
)
}
<Button>Обычная кнопка</Button>
<Button variant="danger" size="large">Удалить</Button>
Code Example 5: Children prop
❓ Что такое children? Откуда берётся его значение в компоненте Card?
function Card({ title, children }) {
return (
<div className="card">
<h2>{title}</h2>
<div className="card-body">
{children}
</div>
</div>
)
}
<Card title="Новости">
<p>Сегодня солнечно!</p>
<button>Подробнее</button>
</Card>
Code Example 6: Spread operator
❓ Что делает spread-оператор {...buttonProps}? Какой результат будет эквивалентен?
const buttonProps = {
type: 'submit',
disabled: false,
className: 'btn-primary'
}
<button {...buttonProps}>Отправить</button>
Code Example 7: Props vs State
❓ Чем отличаются props от state в этом примере? Кто контролирует данные?
function Example() {
const [count, setCount] = useState(0)
return <Counter value={count} onIncrement={() => setCount(c => c + 1)} />
}
function Counter({ value, onIncrement }) {
return (
<div>
<span>{value}</span>
<button onClick={onIncrement}>+1</button>
</div>
)
}
Code Example 8: Props mutation
❓ Почему Version A неправильна? Как исправить, если нужно изменить данные?
Version A:
function BadComponent(props) {
props.name = 'Другое имя'
return <span>{props.name}</span>
}
Version B:
function GoodComponent({ initialName }) {
const [name, setName] = useState(initialName)
return <span>{name}</span>
}