Где я могу разместить эту локальную переменную? Он помещается перед оператором return в функции рендеринга правильно?
Да. У вас есть это:
render() {
return (
// ...
<Route exact path='/' render={() =>
<PetList pets={this.state.pets} />
} />
// ...
);
}
Текст говорит вам сделать что-то вроде этого:
render() {
const renderPetList = () => <PetList pets={this.state.pets} />;
return (
// ...
<Route exact path='/' render={renderPetList} />
// ...
);
}
Я на самом деле не понимаю ...
и ...rest
, какова цель ...
в одиночку, а также с ...rest
?
Я не могу сказать, к чему это относится, но, полагаю, вы видели это в контексте разрушения объекта.
Это надуманный пример, но
Предположим, что вы хотите создать оболочку для <button>
, которая использует набор реквизитов, которые вы передадите прямо к <button>
, и тот, который вы не будете (скажем, "mySize
"), потому что вы хотите сделать что-то еще с этим первым. Вы можете сделать это так:
const MyButton = ({ mySize, childen, disabled, tabIndex, onClick, children }) => {
const className = mySize === 'big' ? 'big-button' : 'normal-button';
return (
<button className={className} disabled={disabled} tabIndex={tabIndex} onClick={onClick}>
{children}
</button>
);
};
Хотя это действительно многословно. Вместо того, чтобы повторять имена всех реквизитов, которые мы хотим передать <button>
, мы можем использовать ...
(«оператор распространения»), чтобы выбрать определенные реквизиты для вставки переменных, как мы это сделаем, в то время как rest (эрго ...rest
, хотя вы можете называть его как хотите), добавьте объект, сделав его гораздо более кратким:
const MyButton = ({ mySize, ...restProps }) => {
const className = mySize === 'big' ? 'big-button' : 'normal-button';
return (
<button className={className} {...restProps}>
{children}
</button>
);
};