Смотреть в Telegram
🚀 Полиморфный компонент в React Всем привет! 👋 Полиморфный компонент — это компонент, который может изменять своё поведение или HTML-элемент (тег) в зависимости от переданных пропсов. Это удобно, когда нужно создать гибкий и переиспользуемый UI-компонент, например, кнопку, которая может быть button, a, или div в зависимости от ситуации. 🔹 Пример создания полиморфного компонента Рассмотрим пример, где мы создаём кнопку, которая может рендериться как button или a:
import React from "react";

type PolymorphicProps<E extends React.ElementType> = {
  as?: E; // Тип HTML-элемента или компонента
} & React.ComponentProps<E>; // Наследуем все стандартные пропсы элемента

const PolymorphicComponent = <E extends React.ElementType = "button">({
  as,
  children,
  ...props
}: PolymorphicProps<E>) => {
  const Component = as || "button"; 
  return <Component {...props}>{children}</Component>;
};

const App = () => {
  return (
    <>
      <PolymorphicComponent onClick={() => alert("Button clicked!")}>
        Кнопка
      </PolymorphicComponent>

      <PolymorphicComponent as="a" href="https://react.dev">
        Ссылка
      </PolymorphicComponent>
    </>
  );
};

export default App;
🔹 Как это работает: 1. Проп as: Указывает, какой элемент нужно отрендерить. Например, button, a, div. 2. Типизация: Используем дженерики (<E extends React.ElementType>), чтобы автоматически применять подходящие типы пропсов для выбранного элемента. 3. Гибкость: Компонент можно легко адаптировать под любой HTML-элемент или даже другой React-компонент. 🔹 Почему это полезно: - Повторное использование: Один и тот же компонент может выполнять разные роли (ссылка, кнопка, заголовок и т.д.). - Универсальность: Удобно для библиотек UI-компонентов, где важна максимальная кастомизация. - Читаемость: Код остаётся более понятным и предсказуемым. 🎯 Заключение Этот подход особенно полезен при создании библиотек компонентов, где большинство компонентов полиморфны. Вы можете адаптировать этот шаблон под свои нужды и создать компоненты, которые поддерживают уникальные стили или функциональность. ReactJs Daily | #shortinfo
Please open Telegram to view this post
VIEW IN TELEGRAM
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Бот для знакомств