React Styled-Components, передающие реквизиты

Попытка создать вложенный компонент, который принимает несколько аргументов, например. стили для кнопки, стили для текста и возможная иконка. Все (передача реквизита) работает нормально, если я напрямую отрисовываю кнопку.

Ниже приведен код, который я написал

import React from "react";
import styled from "styled-components";
import _ from "lodash";
import { hexToRgb } from "../styles/helpers";
import * as MaterialIcons from "styled-icons/material";

const StyledButton = styled.button`
  text-align: center;
  border: ${props =>
    props.outline ? `1px solid ${props.outlineColor}` : "none"};
  background: ${props => (props.background ? props.background : "#000")};
  border-color: ${props =>
    props.outlineColor ? props.outlineColor : "transparent"};
  min-width: 120px;
  width: ${props => (props.width ? props.width : "auto")};
  min-height: 40px;
  border-radius: 25px;
  color: ${props => (props.color ? props.color : "#FFF")};
  transition: all ease 0.5s;
  &:hover {
    cursor: pointer;
    background: ${props =>
      props.background ? hexToRgb(props.background) : "#FFF"};
  }
`;

const StyledText = styled.span`
  font-size: 16px;
  font-weight: ${props => (props.fontWeight ? props.fontWeight : 400)};
`;

const StyledIcon = styled(MaterialIcons.Lock)`
  font-size: 15;
  padding: 10px;
`;

const Button = props => {
  let _icon = null;
  const { children, icon } = props;
  console.info("props", props);

  if (icon) {
    _icon = <StyledIcon size = "48" title = "Test icon" />;
  }

  console.info("StyledButton", StyledButton);

  return (
    <StyledButton>
      <StyledText>{children}</StyledText>
      {_icon}
    </StyledButton>
  );
};

export default Button;

Если я напрямую экспортирую StyledButton по умолчанию, он работает нормально.

оборачивать их? где код упаковки?

Anil Kumar 21.05.2019 08:29

А в чем именно проблема?

mgarcia 21.05.2019 08:36

Невозможно получить прямой доступ к props.outlineColor, props.color и т. д.

Alex 21.05.2019 08:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
3
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По какой-то странной причине реквизиты не были переданы в StyledComponent, однако прямое указание того, что я хочу, работает.

   return (
    <StyledButton
      outlineColor = {outlineColor}
      background = {background}
      width = {width}
      color = {color}
      outline = {outline}
    >
      <StyledText>{children}</StyledText>
      {_icon}
    </StyledButton>
  );

Другие вопросы по теме

Как работать с классами, которые меняются в styled-components
Как влияет на производительность добавление *всех* атрибутов стилизованной системы к стилизованному компоненту?
React: необходимо установить медиа-запросы для раскрывающихся элементов в React Project, но не знаете, как это сделать с помощью стилизованных компонентов
Как я могу изменить текст ссылки, чтобы он был полужирным и не подчеркнутым, используя материальный пользовательский интерфейс и стилизованные компоненты?
Как объединить два стилизованных компонента, которые находятся в разных базовых компонентах, но имеют похожие стили?
Реакция: значок вставки продолжает перемещаться за пределы раскрывающегося меню всякий раз, когда размер страницы изменяется на iPad или меньше
Лучший способ стилизовать компонент?
«Похоже, вы обернули styled() вокруг своего компонента React (Hero), но свойство className не передается дочернему элементу»
Настройте теги для vscode-styled-plugin в проекте без машинописного текста
Как отличить, был ли стилизованный компонент создан с помощью компонента React или с другим стилизованным компонентом/нативным тегом