Рубрики
Без рубрики

Как использовать стиль-систему с помощью Teadercript

Первоначально опубликовано в Timrichter.dev Стильные компоненты ❤ ️. Есть куча библиотек Alread … Помечено с помощью Teadercript, React, CSS, JavaScript.

Первоначально опубликовано в Timrichter.dev.

Стильные компоненты ❤ ️. Есть куча библиотек, уже написанных для него, одна из которых является стиль-система, которая упрощает создание компонентной системы проектирования.

Сейчас стиль-система потрясающая Но у меня были проблемы с поиском хороших способов интеграции его с помощью Teadercript, особенно при использовании пользовательских компонентов. Так что вот небольшое руководство о том, как это сделать 😉

Предпосылка

Если вы еще не установили типы для стилизованной системы.

npm install @types/styled-system
# or with yarn
yarn add @types/styled-system

Обычно стилизованные теги

import { layout, LayoutProps } from 'styled-system';

const Image = styled.img`
  ${layout}
`;

Стильные компоненты не знают о нас, используя реквизиты макета в нашем компоненте изображения, поэтому мы должны явно объявлять его с помощью «LayoutProps».

Существует реквизит, эквивалентен для всего в стиле в стиле системе, например, ColorProps, пространство – это космические трубы и так далее.

Пользовательские компоненты

import { layout, LayoutProps, position, PositionProps } from 'styled-system';

interface Props extends PositionProps, LayoutProps {
  children: React.ReactNode;
}

const Container = styled.div`
  ${position};
  ${layout};
`;

const DropdownMenu: React.FC = ({ children, ...props }) => {
  return {children};
};

Важные детали здесь должны пройти оставшуюся часть реквизита к элементу, который должен быть введен в стили (в данном случае «контейнер») и объединение макета, позиции и пользовательских реквизитов (здесь «детей») в один тип, а затем передавать это Стильный компонент и сам компонент 😁

Расширенные пользовательские компоненты

import { space, SpaceProps } from 'styled-system';

interface ContainerProps extends React.HTMLAttributes {
  isOwner: boolean;
}

type Props = ContainerProps & SpaceProps & {
    content: string;
};

const Container = styled.div`
  ${space};
  ${(props) =>
    props.isOwner ? 'align-self: flex-end' : 'align-self: flex-start'
   };
`;

const Message: React.FC = ({ content, isOwner, ...props }) => {
  return (
    
      {content}
    
  );
};

Это выглядит непростой 😅 Мы собираемся пройти через это один за другим.

interface ContainerProps extends React.HTMLAttributes {
  isOwner: boolean;
}

const Container = styled.div`
  ${space};
  ${(props) =>
    props.isOwner ? 'align-self: flex-end' : 'align-self: flex-start'
   };
`;

Мы хотим дать в стиле Div на заказ «Isowner» в стиле его условно. Для этого мы должны продлить реквизиты, что элемент div ожидает (htmlattributes)

type Props = ContainerProps & SpaceProps & {
    content: string;
};

const Message: React.FC = ({ content, isOwner, ...props }) => {
  return (
    
      {content}
    
  );
};

Мы объединяем все реквизиты из контейнера, космических реквизитов и нашего пользовательского «контента» -Prop вместе в один тип и передайте это к компоненту. В конце концов мы можем пройти:

  • Все реквизиты, что обычный элемент div, кроме, они будут переданы наш контейнер
  • Все космические реквизиты от стилизованной системы, они также передаются в наш контейнер
  • Наш нестандартный реквизит «Isowner» и «контент», «Isowner» передан в контейнер и «контент» будет ребенком

У нас есть сильно напечатанный компонент, который использует стилизованные системы, стилизованные компоненты и пользовательские реквизиты 🥳

Оригинал: “https://dev.to/timrichter/how-to-use-styled-system-with-typescript-2fjo”