Объяснение 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 запускает новую модель Gemini 2.0 Flash с поддержкой мультимодальных функций
Google запускает новую модель Gemini 2.0 Flash с поддержкой мультимодальных функций
Google запускает новую модель Gemini 2.0 Flash с поддержкой мультимодальных функций

Компания Google анонсировала запуск Gemini 2.0 Flash, что знаменует начало новой эры в развитии их флагманских моделей искусственного интеллекта. Эта версия значительно превосходит своего предшественника — Gemini 1.5 Pro — демонстрируя вдвое более высокую скорость работы и улучшенные результаты на ключевых тестах производительности.

Dev новости: Astro 5.1, новый компилятор в rust, WebAssembly поддержка во flutter
Dev новости: Astro 5.1, новый компилятор в rust, WebAssembly поддержка во flutter
Dev новости: Astro 5.1, новый компилятор в rust, WebAssembly поддержка во flutter

Команда Astro порадовала разработчиков очередным релизом — 19 декабря увидела свет версия Astro 5.1. Как сообщил один из основных разработчиков проекта, Мэтт Кейн, в обновлении представлены несколько важных новшеств. Среди них — экспериментальная поддержка сессий и более эффективное кеширование изображений, включая работу с удалёнными ресурсами.

NumPy 2.0: Новая Эра для Фундаментальной Математической Библиотеки Python
NumPy 2.0: Новая Эра для Фундаментальной Математической Библиотеки Python
NumPy 2.0: Новая Эра для Фундаментальной Математической Библиотеки Python

С релизом NumPy 2.0, первой значимой новой версии с 2006 года, мир Python получает не только улучшенную производительность, но и множество новых функций. NumPy, являясь краеугольным камнем научных и числовых вычислений на Python, продолжает расширять свои возможности и упрощать работу для разработчиков и исследователей.

Dev новости: Next.js 15, Rust и AI-зарплаты, а также обзор Million.js
Dev новости: Next.js 15, Rust и AI-зарплаты, а также обзор Million.js
Dev новости: Next.js 15, Rust и AI-зарплаты, а также обзор Million.js

Не очевидное кеширование в Next.js 15, Rust перспективно для заработка и небольшой обзор мини библиотеки Million.js