Условный рендеринг — это фундаментальная концепция React, которая позволяет динамически отображать или скрывать компоненты в зависимости от определённых условий. Это похоже на условные конструкции if или тернарный оператор в JavaScript, но с учётом особенностей React. Сегодня мы разберёмся, как реализовать условный рендеринг и создадим компонент, который приветствует только авторизованных пользователей.

Как работает условный рендеринг в React?

В React всё вращается вокруг компонентов, которые возвращают JSX. Чтобы условно отображать части интерфейса, вы можете использовать стандартные инструменты JavaScript: if, тернарный оператор (? :), и логическое &&. Давайте рассмотрим каждый из них.

Использование if

Если у вас сложная логика, вы можете использовать if для определения, что отображать:

function Greeting({ isLoggedIn }) {
  if (isLoggedIn) {
    return <h1>Добро пожаловать!</h1>;
  } else {
    return <h1>Пожалуйста, войдите в систему</h1>;
  }
}

Как это работает: Функция проверяет значение isLoggedIn и возвращает нужный JSX.

Когда использовать: if подходит для сложных условий или когда есть много разных веток кода.

Тернарный оператор

Если условие простое, используйте тернарный оператор. Он позволяет писать более компактный код:

function Greeting({ isLoggedIn }) {
  return <h1>{isLoggedIn ? 'Добро пожаловать!' : 'Пожалуйста, войдите в систему'}</h1>;
}

Как это работает: Если isLoggedIn равен true, отображается текст «Добро пожаловать!». В противном случае — «Пожалуйста, войдите в систему».

Когда использовать: Тернарный оператор идеален для коротких и простых условий.

Логическое &&

Иногда вы хотите отобразить что-то, только если условие истинно. В этом случае пригодится оператор &&:

function AdminPanel({ isAdmin }) {
  return (
    <div>
      {isAdmin && <button>Удалить пользователя</button>}
    </div>
  );
}

Как это работает: Если isAdmin истинно, React рендерит кнопку. Если ложно — ничего не отображается.

Когда использовать: Логическое && хорошо подходит для случаев, когда отображается только один элемент, если условие истинно.

Практика: компонент приветствия для авторизованных пользователей

Давайте создадим компонент, который:

  • Показывает «Добро пожаловать, [имя пользователя]!» для авторизованных пользователей.
  • Показывает «Пожалуйста, войдите в систему» для гостей.
  • Добавим кнопку «Войти/Выйти», чтобы пользователь мог менять своё состояние.

Шаг 1: Инициализация состояния

В компоненте App мы будем хранить состояние авторизации. Используем хук useState:

import React, { useState } from 'react';

function App() {
  const [isLoggedIn, setIsLoggedIn] = useState(false); // По умолчанию пользователь не авторизован
  const [username, setUsername] = useState('Иван'); // Имя пользователя

  const toggleLogin = () => {
    setIsLoggedIn(!isLoggedIn); // Переключаем состояние
  };

  return (
    <div>
      <Greeting isLoggedIn={isLoggedIn} username={username} />
      <button onClick={toggleLogin}>
        {isLoggedIn ? 'Выйти' : 'Войти'}
      </button>
    </div>
  );
}

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

Создадим компонент, который отображает приветствие на основе состояния авторизации:

function Greeting({ isLoggedIn, username }) {
  if (isLoggedIn) {
    return <h1>Добро пожаловать, {username}!</h1>;
  }
  return <h1>Пожалуйста, войдите в систему</h1>;
}

Шаг 3: Объединяем всё вместе

Вот итоговый код:

import React, { useState } from 'react';

function App() {
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  const [username, setUsername] = useState('Иван');

  const toggleLogin = () => {
    setIsLoggedIn(!isLoggedIn);
  };

  return (
    <div style={{ textAlign: 'center', marginTop: '50px' }}>
      <Greeting isLoggedIn={isLoggedIn} username={username} />
      <button
        onClick={toggleLogin}
        style={{
          padding: '10px 20px',
          fontSize: '16px',
          backgroundColor: isLoggedIn ? '#f44336' : '#4CAF50',
          color: 'white',
          border: 'none',
          borderRadius: '5px',
          cursor: 'pointer',
          marginTop: '20px',
        }}
      >
        {isLoggedIn ? 'Выйти' : 'Войти'}
      </button>
    </div>
  );
}

function Greeting({ isLoggedIn, username }) {
  if (isLoggedIn) {
    return <h1>Добро пожаловать, {username}!</h1>;
  }
  return <h1>Пожалуйста, войдите в систему</h1>;
}

export default App;

Шаг 4: Запуск приложения

Откройте терминал и запустите приложение:

npm run dev

В браузере вы увидите приветствие и кнопку «Войти».

Нажмите на кнопку — состояние изменится, и появится сообщение «Добро пожаловать, Иван!». Нажмите снова — компонент переключится обратно на «Пожалуйста, войдите в систему».

Дополнительное задание: добавьте условный стиль

Давайте добавим стиль, который меняется в зависимости от авторизации:

function Greeting({ isLoggedIn, username }) {
  const greetingStyle = {
    color: isLoggedIn ? 'green' : 'gray',
  };

  return (
    <h1 style={greetingStyle}>
      {isLoggedIn ? `Добро пожаловать, ${username}!` : 'Пожалуйста, войдите в систему'}
    </h1>
  );
}

Теперь текст будет зелёным для авторизованных пользователей и серым для гостей.

Итоги

Условный рендеринг — мощный инструмент в React, который позволяет адаптировать интерфейс к состоянию приложения. Сегодня мы узнали:

  • Как использовать if, тернарный оператор и логическое && для отображения компонентов.
  • Когда лучше использовать каждый из этих методов.
  • Как создать компонент с условным рендерингом на практике.

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

 

Комментарии

0

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