Как передать пользовательский атрибут стилизованному компоненту в функциональном компоненте?

Я пытаюсь понять, как эта штука работает, но все примеры, которые я нашел, были написаны в стиле класса.

   import React from 'react'
   import styled from 'styled-components/native'

   const MyTag = styled.Button.attrs({
     title: myThisThingValue
   })`
     // some style
     background: thisIsAlsoMyThingValue
   \` 

   export default function MyComponent({ props }) {
     return(
       <MyTag myThisThing = "My value" thisIsAlsoMyThing = "Other Value" />
         )
   }

Мне просто нужен доступ к моим пользовательским атрибутам в стиле MyTag. Я использовал (props) => {title: props.MyThing } в .attrs(), но это не сработало.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
0
12 788
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Вы будете создавать функции для отдельных атрибутов, а не для всего параметра attrs. Например:

   const MyTag = styled.Button.attrs({
     title: (props) => props.myThisThing
   })`
     background: ${props => props.thisIsAlsoMyThing}
   `

вы могли бы использовать что-то вроде этого

interface Props {
  disabled?: boolean;
}

interface Attrs {
  href?: string;
}

const Link = styled.a.attrs(({ href = "#" }: Attrs) => ({
  href,
  onClickCapture: (event: any) => event.preventDefault()
}))`
  color: ${({ disabled = false }: Props) => (disabled ? "#eee" : "initial")};
`;

а затем использовать его

<Link href = "http://google.com" target = {"_blank"}>
   Click here
</Link>

У меня есть проблема с другой версией стилизованного компонента:/

это должно работать:

Версия JavaScript:

export const MyTag = styled.button.attrs(props => ({
  title: props.myThisThingValue,
}))`
  background: ${props => props.thisIsAlsoMyThing};
`;

Версия TypeScript:

interface MyTagProps {
  myThisThingValue: string;
  thisIsAlsoMyThing: string;
}

export const MyTag = styled.button.attrs((props: MyTagProps) => ({
  title: props.myThisThingValue,
}))<MyTagProps>`
  background: ${props => props.thisIsAlsoMyThing};
`;

Используй это:

<MyTag myThisThingValue = "My value" thisIsAlsoMyThing = "red" />

В этом случае title — это defined attribute, но если вам нужен атрибут данных, такой как indexNumber (атрибут не определен), вам нужно будет использовать префикс data-*:

export const TagName = styled.button.attrs((props) => {
  return {
    data-indexNumber: "indexNumber value"
  };
})``;

Использование атрибутов данных

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