Объяснение Higher Order Components (HOC) в React.js

Популярный паттерн в библиотеке react.js HOC. Компонент высшего порядка работает очень похоже как HOF (функция высшего порядка), но передается для HOC аргумент в виде компонента. Один из способов переиспользования компонентов. Посмотрим пример:

// HOC компонент, универсально работающий для обычного выводящего текста компонента и выводящего инпут (ниже)
function withHover(WrappedComponent) {
  return function (props) {
    const [isHovered, setHovered] = useState(false);

    function handleMouseEnter() {
      setHovered(true);
    }

    function handleMouseLeave() {
      setHovered(false);
    }

    return (
      <div onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>
        <WrappedComponent {...props} isHovered={isHovered} />
      </div>
    );
  };
}

// Обычный компонент, принимающий текст и состояние Hovered
const TextComponent = ({ text, isHovered }) => {
  return (
    <>
      <p style={{ backgroundColor: isHovered ? "blue" : "white" }}>{text}</p>
    </>
  );
};

// Обычный компонент, принимающий nbg bygenf и состояние Hovered
const InputComponent = ({ type, isHovered }) => {
  return (
    <input
      type={type}
      style={{ backgroundColor: isHovered ? "blue" : "white" }}
    />
  );
};

// Создаем с помощью HOC 2 компонента
const TextComponentWithHover = withHover(TextComponent);
const InputComponentWithHover = withHover(InputComponent);

// И выводим в приложении 
const App = () => {
  return (
    <div className="App">
      <TextComponentWithHover
        text="Текст Loremru"
      />

      <InputComponentWithHover type="text" />
    </div>
  );
};

export default App;

Читайте также
Google возьмет всю базу Stack Overflow для своего Gemini
Google возьмет всю базу Stack Overflow для своего Gemini
Google возьмет всю базу Stack Overflow для своего Gemini

Крупная база для разработчиков Stack Overflow запускает для ИИ доступ к своей всей базе через АПИ (OverflowAPI). И главным партнером становится Google, который будет использовать данные Stack Overflow для обучения Gemini. А Google поможет реализовать Stack Overflow мощные функции для проекта OverflowAI, который уже развивается. Обе компании планируют просмотр этих интеграций на конференции Google Cloud […]

Что нового для разработчиков в Chrome 119
Что нового для разработчиков в Chrome 119
Что нового для разработчиков в Chrome 119

Обновлен верхний предел срока действия файлов cookie, уже находящихся в хранилище, в CSS появились новые псевдоклассы , синтаксис относительного цвета и многое другое. Подробнее в обзоре.

Microsoft Dev Kit для Visual Studio Code стал общедоступным
Microsoft Dev Kit для Visual Studio Code стал общедоступным
Microsoft Dev Kit для Visual Studio Code стал общедоступным

Расширение C# Dev Kit включает в себя основные сервисы языка C#, помощь IntelliCode, возможности тестирования, отладки и управления проектами. Поддержка .NET MAUI и Unity сейчас находится в стадии предварительного просмотра.

JavaScript, Python и Java удерживают лидерство в рейтингах языков программирования
JavaScript, Python и Java удерживают лидерство в рейтингах языков программирования
JavaScript, Python и Java удерживают лидерство в рейтингах языков программирования

Последние данные от аналитиков RedMonk и TIOBE показывают устойчивое положение ведущих языков программирования, таких как JavaScript, Python и Java, которые продолжают лидировать в своих категориях. В то время как языки вроде C сталкиваются с вызовами, а более новые решения, такие как Ballerina, набирают популярность. В третьем квартале 2024 года в рейтинге языков программирования от RedMonk […]