J'ai un composant CTA dans le projet React. Je l'utilise plusieurs fois sur ma page. Je voudrais changer la couleur d'arrière-plan et la couleur du texte pour l'une des utilisations du CTA. Comment puis je faire ça?
J'ai essayé d'ajouter un nom de classe à l'un des composants du CTA et de le styliser mais rien n'a changé. J'essaye également d'ajouter un style en ligne. Mon fichier App.js contient le composant CTA:
import '../../style/CTA.scss'
const CTA = ({ ...props }) => {
return (
<div
class='CTA'
onClick={props.onClick}
>
{props.word}
</div>
)
}
export default CTA
Mon composant CTA est le suivant:
<CTA word='CTA HERE' className='unique-cta-styling' style={{color: 'black'}}/>
4 Réponses :
className = 'unique-cta-styling' s'applique uniquement, a priori aux balises HTML. Les composants React peuvent ou ne peuvent rien faire avec les accessoires className .
Pour styliser un composant React, vous pouvez l'envelopper dans un Ici, vous pouvez également styliser les éléments html rendus par le composant CTA. Par exemple, pour styliser les éléments Modifier: puisque vous pouvez modifier votre composant, vous pouvez transmettre vos accessoires à l'enfant. const CTA = ({word, ...props}) => {
return (
<div {...props}>
{word}
</div>
)
}
que le composant CTA rend, vous pouvez ajouter ce qui suit à votre fichier CSS: .cta-styling span {
color: 'red';
}
<div className='cta-styling' style={{background-color: 'black'}}>
<CTA word='CTA HERE' />
</div>
Merci pour votre réponse mais je ne veux pas ajouter un autre div au DOM. Et cela ne change pas réellement la couleur du composant lui-même. Je veux juste pouvoir changer dynamiquement la couleur d'arrière-plan et la couleur du texte de mon composant existant sans créer un nouveau div.
Je vous recommande d'utiliser styled-components
En utilisant des composants stylés, vous pouvez le faire quelque chose comme suivre. vous pouvez styliser ce composant dans un fichier js (styles.js):
import { YourComponent } from './styles'
<YourComponent
yourProps="Status01"
>
Component Name
</YourComponent>
`;
et l'importer dans votre fichier de composant. p >
export const YourComponent= styled.button`
margin-top: 10px;
margin-bottom: 5px;
background-color: ${props => {
switch (props.yourProps) {
case "Status01":
return "#0D47A1";
case "Status02":
return "#2E7D32";
default:
return "#FF8F00";
}
}};
&:hover {
background-color: ${props => {
switch (props.yourProps) {
case "Status01":
return "#0D47A1";
case "Status02":
return "#2E7D32";
default:
return "#FF8F00";
}
}};
}
J'espère que cela vous aidera!
Ah intéressant. J'ai déjà utilisé des composants stylisés, mais pas avec un boîtier d'interrupteur à l'intérieur.
Je recommanderais d'utiliser Styled Components . Ce qui peut être lu sur ici . Ils ont également un bon exemple de bouton que vous pouvez lire.
import styled from 'styled-components';
const getBackgroundColor = ({ backgroundColor }) => backgroundColor || 'red';
const getTextColor = ({ textColor }) => textColor || 'black';
export default styled.button`
// Other static styling goes here
background-color: ${getBackgroundColor};
color: ${getTextColor};
`;
Et puis dans votre fichier de composant stylisé, vous pouvez avoir ce qui suit:
import React from 'react';
import StyledCTA from '../../style/styled-CTA';
const CTA = ({
onClick,
word,
backgroundColor,
textColor,
}) => (
<StyledCTA
onClick={onClick}
backgroundColor={backgroundColor}
textColor={textColor}
>
{word}
</StyledCTA>
);
export default CTA;
Cela devrait fonctionner pour vous. Vous pouvez le voir s'exécuter sur ce lien [ https://jsfiddle.net/wu7kv15q/1/] également.
Le Le principal hic dans votre code était que vous devez explicitement mapper le ClassName aux éléments html dans le cas de composants personnalisés.
class Test extends React.Component {
render() {
return (
<CTA word='CTA HERE' className='unique-cta-styling' style={{color: 'red'}}/>
)
}
}
const CTA = ({ word,className,style,onClick }) => {
return (
<div
className={`CTA ${className}`}
onClick={onClick}
style={style}
>
{word}
</div>
)
}
ReactDOM.render(
<Test />,
document.getElementById('container')
);
Que contient ce composant CTA? Où ce ClassName est-il passé?
Je viens de mettre à jour la question avec mon composant CTA.
J'ai également trouvé cela que je pensais être une solution intéressante, sauf comment appliquer cette solution à un simple changement de couleur d'arrière-plan pour un CTA? itnext.io/…