Компонент Card
, который мы писали ранее, на практике бесполезен, так как не позволяет поменять тексты. А создавать на каждый конкретный блок Card
свой собственный компонент — не самая хорошая идея. Я уже не говорю о том, что чаще всего такое просто невозможно, ведь данные подставляются динамически.
Передавать данные в компоненты можно, и делается это с помощью пропсов (props):
See the Pen js_react_props by Hexlet (@hexlet) on CodePen.
Как видно, снаружи пропсы передаются как атрибуты в HTML, которые внутри компонента доступны из объекта props
. Причём такая передача входных данных для нас уже не в новинку. Встроенные компоненты точно так же принимают на вход пропсы, такие как className
и другие.
const vdom = (
<div className="row">
<div className="col-6">
<HelloMessage name="Kate" />
</div>
<div className="col-6">
<HelloMessage name="Mark" />
</div>
</div>
);
Пропсы — очень простой механизм передачи данных в компоненты, который, как правило, не вызывает никаких сложностей. Главное, что нужно запомнить при работе с пропсами: их нельзя изменять. Во-первых, из-за принципа работы React это просто ни к чему не приведёт, во-вторых, для работы с изменяемым состоянием в React предусмотрен совершенно другой механизм, который мы рассмотрим позже.
Работая с пропсами, нередко приходится передавать множество параметров, либо эти параметры присутствуют в коде в виде объекта. В таком случае можно упростить передачу, используя оператор расширения.
const params = {
className: 'row',
title: 'name',
};
const name = 'Eva';
const vdom = <div id="container" {...params}>
Hello, {name}
</div>;
Код выше эквивалентен следующему примеру:
const name = 'Eva';
const vdom = <div id="container" className="row" title="name">
Hello, {name}
</div>;
Другая задача, с которой сталкиваются разработчики - установка значений по умолчанию для пропсов. Проще всего устанавливать их прямо внутри функции render
, используя такой подход:
const title = this.props.title || 'hi!';
Это сработает, но потенциально может привести к проблемам производительности (в первую очередь). Мы поговорим об этом в одном из последних уроков.
В React предусмотрен способ устанавливать значения пропсов по умолчанию. Пример:
class Header extends React.Component {
static defaultProps = {
text: 'Hello, world!',
};
render() {
const { text } = this.props;
return (
<h1>{text}</h1>
);
}
}
Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт