Estou tentando passar um nome de classe para um componente de reação para alterar seu estilo e não consigo funcionar:
class Pill extends React.Component {
render() {
return (
<button className="pill {this.props.styleName}">{this.props.children}</button>
);
}
}
<Pill styleName="skill">Business</Pill>
Estou tentando mudar o estilo da pílula passando no nome da classe que tem o respectivo estilo. Eu sou novo no React, então talvez eu não esteja fazendo isso da maneira certa. obrigado
javascript
reactjs
hilarl
fonte
fonte
Apenas para referência, para componentes sem estado:
Irá renderizar:
fonte
pill ${this.props.styleName}
obterá "pílula indefinida" quando você não definir os adereçoseu prefiro
ou
fonte
Para qualquer pessoa interessada, encontrei o mesmo problema ao usar módulos css e módulos css react .
A maioria dos componentes tem um estilo de módulo css associado e, neste exemplo, meu botão tem seu próprio arquivo css, assim como o componente pai Promo . Mas eu quero passar alguns estilos adicionais para Button from Promo
Portanto, o
style
botão capaz se parece com isto:Button.js
No componente Button acima, os estilos Button.css tratam dos estilos de botão comuns. Neste exemplo, apenas uma
.button
classeEntão, no meu componente onde desejo usar o Botão e também quero modificar coisas como a posição do botão, posso definir estilos extras
Promo.css
e passar como oclassName
suporte. Neste exemplo, novamente chamado de.button
classe. Eu poderia ter chamado de qualquer coisa, por exemplopromoButton
.Claro que com os módulos css esta classe será,
.Promo__button___2MVMD
enquanto o botão será algo como.Button__button___3972N
Promo.js
fonte
Como já foi dito, use uma expressão interpretada com chaves.
Mas não se esqueça de definir um padrão.
Outros sugeriram o uso de uma instrução OR para definir uma string vazia if
undefined
.Mas seria ainda melhor declarar seus adereços.
Exemplo completo:
fonte
Você pode fazer isso "interpolando" o className passado do componente pai para o componente filho usando
this.props.className
. Exemplo abaixo:fonte
Com React 16.6.3 e @Material UI 3.5.1, estou usando matrizes em className como
className={[classes.tableCell, classes.capitalize]}
Tente algo como o seguinte no seu caso.
fonte
Com o suporte do React para interpolação de strings, você pode fazer o seguinte:
fonte
Em Typescript você precisa definir os tipos de
HTMLAttributes
eReact.FunctionComponent
.Na maioria dos casos, você precisará estendê-lo para outra interface ou tipo.
fonte