Когда вы начинаете разбираться в React, то быстро сталкиваетесь с ключевой идеей: всё в React — это компоненты. Они как кирпичики, из которых вы строите ваше приложение. Сегодня мы поговорим о функциональных компонентах, пропсах и о том, как они вместе помогают создавать динамичные и переиспользуемые интерфейсы.

Разница между функциональными и классовыми компонентами

Классовые компоненты: прошлое React

Когда React только появился, компоненты создавались с использованием классов. Вот как это выглядело:

import React, { Component } from 'react';

class Greeting extends Component {
  render() {
    return <h1>Привет, {this.props.name}!</h1>;
  }
}

export default Greeting;

Классовые компоненты имели свои особенности:

  • Они поддерживали состояния (state) и методы жизненного цикла.
  • Код выглядел громоздко из-за необходимости использовать this и лишние конструкции, такие как constructor.

Классы были мощными, но со временем стало очевидно, что можно сделать React проще и элегантнее.

Функциональные компоненты: будущее React

С появлением хуков (React 16.8) функциональные компоненты стали основным способом написания компонентов. Они проще, понятнее и поддерживают все функции, которые раньше были доступны только в классовых компонентах.

Вот эквивалент предыдущего примера с использованием функционального компонента:

function Greeting({ name }) {
  return <h1>Привет, {name}!</h1>;
}

export default Greeting;

Разница очевидна:

  • Меньше кода.
  • Нет this — данные передаются напрямую через аргументы.
  • Легко добавлять состояния и другие возможности через хуки, такие как useState и useEffect.

Почему функциональные компоненты — это круто?

  • Простота. Они представляют собой обычные JavaScript-функции.
  • Гибкость. С помощью хуков функциональные компоненты могут делать всё, что раньше требовали классы.
  • Стандартизация. Сообщество React активно использует функциональные компоненты.

Что такое пропсы и как передавать данные в компоненты

Пропсы (props — от слова properties) — это способ передавать данные в компонент. Представьте их как параметры функции, которые позволяют сделать компонент универсальным и динамичным.

Как работают пропсы?

Пропсы передаются в компонент как атрибуты:

<Greeting name="Иван" />

Внутри компонента пропсы доступны как объект:

function Greeting(props) {
  return <h1>Привет, {props.name}!</h1>;
}

С помощью деструктуризации кода становится ещё меньше:

function Greeting({ name }) {
  return <h1>Привет, {name}!</h1>;
}

Пример: пропсы в действии

Представьте компонент, который отображает информацию о товаре. Вы можете передавать название, цену и описание как пропсы:

function ProductCard({ title, price, description }) {
  return (
    <div>
      <h2>{title}</h2>
      <p>Цена: {price} руб.</p>
      <p>{description}</p>
    </div>
  );
}

Использование компонента:

<ProductCard 
  title="Кофемашина" 
  price={25000} 
  description="Высококачественная кофемашина для вашего дома." 
/>

Рекомендации по структурированию компонентов

  • Разделяйте компоненты на маленькие блоки. Если компонент становится слишком большим, выделите повторяющиеся части в отдельные компоненты.
  • Давайте понятные имена. Имя должно отражать, что делает компонент. Например, ProductCard явно указывает, что это карточка товара.
  • Держите один компонент — одну задачу. Компонент должен быть максимально автономным и отвечать только за свою часть интерфейса.
  • Переиспользуйте компоненты. Если код повторяется в разных местах, вынесите его в компонент. Это упростит поддержку и развитие проекта.
  • Избегайте ненужного состояния. Если данные можно передать через пропсы, не храните их в состоянии.

Практика: создаём компонент для карточки товара

Задача: Создать компонент ProductCard, который принимает пропсы: название товара, цену и описание. Отобразить карточку товара на экране.

Шаг 1: Создание компонента

Откройте файл src/App.jsx и замените содержимое:

function ProductCard({ title, price, description }) {
  return (
    <div style={{ border: '1px solid #ccc', padding: '16px', margin: '16px' }}>
      <h2>{title}</h2>
      <p>Цена: {price} руб.</p>
      <p>{description}</p>
    </div>
  );
}

function App() {
  return (
    <div>
      <ProductCard 
        title="Кофемашина" 
        price={25000} 
        description="Высококачественная кофемашина для вашего дома." 
      />
      <ProductCard 
        title="Тостер" 
        price={3000} 
        description="Компактный тостер с различными режимами обжарки." 
      />
    </div>
  );
}

export default App;

Сохраните файл и запустите приложение с помощью:

npm run dev

Шаг 2: Проверяем результат

В браузере вы должны увидеть две карточки:

  • Кофемашина: 25000 руб.
  • Тостер: 3000 руб.

Каждая карточка отформатирована и отображает данные, переданные через пропсы.

Шаг 3: Улучшаем дизайн

Чтобы добавить немного стиля, можно использовать встроенные стили:

const cardStyle = {
  border: '1px solid #ddd',
  borderRadius: '8px',
  padding: '16px',
  margin: '16px',
  boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)',
};

function ProductCard({ title, price, description }) {
  return (
    <div style={cardStyle}>
      <h2>{title}</h2>
      <p>Цена: {price} руб.</p>
      <p>{description}</p>
    </div>
  );
}

Теперь карточки выглядят приятнее.

Итоги

Мы познакомились с функциональными компонентами и пропсами. Они являются основой React и позволяют строить гибкие и переиспользуемые интерфейсы. Важно помнить:

  • Функциональные компоненты — это современный стандарт React.
  • Пропсы позволяют передавать данные в компоненты.
  • Модульная структура упрощает разработку и поддержку приложений.
 

Комментарии

0

Без регистрации и смс