React Пропсы (Props)

Пропсы (props) — это аргументы, передаваемые компонентам React.

Пропсы передаются компонентам через атрибуты HTML.

Термин пропсы (props) обозначает свойства (properties).

Пропсы компонентов React

Компоненты React принимают пропсы подобно аргументам функций в JavaScript и атрибутам элементов в HTML.

Передача пропсов осуществляется таким же синтаксисом, как у атрибутов HTML.

Пример

Добавляем атрибут brand компоненту Car:


createRoot(document.getElementById('root')).render(
  <Car brand="Ford" />
);

Компонент получает аргумент в виде объекта props.

Пример

Используем значение атрибута brand внутри компонента Car:


function Car(props) {
  return (
    <h2>Я автомобиль марки {props.brand}!</h2>
  );
}

Название объекта — props, но вы можете назвать его любым другим именем.

Пример

Можно заменить название props на любое другое, например, myobj:


function Car(myobj) {
  return (
    <h2>Я автомобиль марки {myobj.brand}!</h2>
  );
}


Передача нескольких пропсов

Можно передавать столько пропсов, сколько потребуется.

Каждый атрибут становится отдельным свойством объекта props в компоненте.

Пример

Передаем сразу несколько свойств компоненту Car:


createRoot(document.getElementById('root')).render(
  <Car brand="Ford" model="Mustang" color="red" />
);

Все значения будут получены компонентом в объекте props.

Пример

Используем полученные свойства внутри компонента Car:


function Car(props) {
  return (
    <h2>Я красный Ford Mustang!</h2>
  );
}


Различные типы данных

Пропсы могут быть любого типа данных: переменные, числа, строки, объекты, массивы и др.

Строки можно указывать прямо в кавычках, числа, объекты и переменные необходимо заключать в фигурные скобки.

Пример

Число должно быть передано в фигурных скобках, иначе оно интерпретируется как строка:


createRoot(document.getElementById('root')).render(
  <Car year={1969} />
);

Пример

Переменная также передается в фигурных скобках:


let x = "Ford";

createRoot(document.getElementById('root')).render(
  <Car brand={x} />
);

Пример

Объекты и массивы тоже требуют фигурных скобок:


let x = [1964, 1965, 1966]; // Массив
let y = {name: "Ford", model: "Mustang"}; // Объект

createRoot(document.getElementById('root')).render(
  <Car years={x} carinfo={y} />
);


Объекты как пропсы

Компонент обрабатывает пропсы-объекты как обычные объекты, позволяя обращаться к свойствам через точечную нотацию.

Пример

Доступ к свойствам объекта через точку:


function Car(props) {
  return (
    <>
      <h2>Мой автомобиль {props.carinfo.name} {props.carinfo.model}!</h2>
      <p>Он {props.carinfo.color} и выпущен в {props.carinfo.year} году.</p>
    </>
  );
}

const carInfo = {
  name: "Ford",
  model: "Mustang",
  color: "красный",
  year: 1969
};

createRoot(document.getElementById('root')).render(
  <Car carinfo={carInfo} />
);


Массивы как пропсы

Массивы позволяют получать доступ к данным через индексы.

Пример

Обращаемся к элементам массива по индексам:


function Car(props) {
  return (
    <h2>Моя автомобиль — {props.carinfo[0]} {props.carinfo[1]}!</h2>
  );
}

const carInfo = ["Ford", "Mustang"];

createRoot(document.getElementById('root')).render(
  <Car carinfo={carInfo} />
);


Передача пропсов между компонентами

Атрибуты используются для передачи данных между компонентами, аналогично параметрам функций.

Пример

Передаем атрибут brand от компонента Garage к компоненту Car:


function Car(props) {
  return (
    <h2>Я автомобиль марки {props.brand}!</h2>
  );
}

function Garage() {
  return (
    <>
      <h1>Кто живет в моем гараже?</h1>
      <Car brand="Ford" />
    </>
  );
}

createRoot(document.getElementById('root')).render(
  <Garage />
);

Важно: Значения props являются значениями только для чтения! Попытка изменить их приведет к ошибке.