Je suis nouveau sur ReactJS et JSX et j'ai un petit problème avec le code ci-dessous.
J'essaie d'ajouter plusieurs classes à l' className
attribut sur chacune li
:
<li key={index} className={activeClass, data.class, "main-class"}></li>
Mon composant React est:
var AccountMainMenu = React.createClass({
getInitialState: function() {
return { focused: 0 };
},
clicked: function(index) {
this.setState({ focused: index });
},
render: function() {
var self = this;
var accountMenuData = [
{
name: "My Account",
icon: "icon-account"
},
{
name: "Messages",
icon: "icon-message"
},
{
name: "Settings",
icon: "icon-settings"
}
/*{
name:"Help & Support <span class='font-awesome icon-support'></span>(888) 664.6261",
listClass:"no-mobile last help-support last"
}*/
];
return (
<div className="acc-header-wrapper clearfix">
<ul className="acc-btns-container">
{accountMenuData.map(function(data, index) {
var activeClass = "";
if (self.state.focused == index) {
activeClass = "active";
}
return (
<li
key={index}
className={activeClass}
onClick={self.clicked.bind(self, index)}
>
<a href="#" className={data.icon}>
{data.name}
</a>
</li>
);
})}
</ul>
</div>
);
}
});
ReactDOM.render(<AccountMainMenu />, document.getElementById("app-container"));
javascript
css
reactjs
ecmascript-6
Hector
la source
la source
classNames={{foo: true, bar: true, baz: false}}
etclassNames={["foo", "bar"]}
simplement ?Réponses:
J'utilise des noms de classe quand il y a une bonne quantité de logique requise pour décider des classes à (ne pas) utiliser. Un exemple trop simple :
Cela dit, si vous ne voulez pas inclure de dépendance, il y a de meilleures réponses ci-dessous.
la source
import classNames from 'classnames'
à utiliser dans un composantclassName={classNames(classes.myFirstClass, classes.mySecondClass)}
.var btnClass = classNames({ btn: true, 'btn-pressed': this.state.isPressed, 'btn-over': !this.state.isPressed && this.state.isHovered }); return <button className={btnClass}>{this.props.label}</button>;
J'utilise des
ES6
modèles de littéraux . Par exemple:Et puis il suffit de le rendre:
Version à une ligne:
la source
<input className={`class1 ${class2}`}>
<input class=" form-control input-lg round-lg" />
. Notez l'espace supplémentaire au début. C'est valide, mais moche. Même React FAQ recommande une autre méthode ou l'utilisation du package classnamesUtilisez simplement JavaScript.
Si vous souhaitez ajouter des clés et des valeurs basées sur des classes dans un objet, vous pouvez utiliser les éléments suivants:
Ou encore plus simple:
la source
className={['terra-Table', medOrder.resource.status]}
className={[listOfClasses].join(' ')}
ça marche pour moi merci!Concat
Pas besoin d'être chic j'utilise des modules CSS et c'est facile
Cela se traduira par:
En d'autres termes, les deux styles
Conditionnels
Il serait facile d'utiliser la même idée avec if
la source
className={
curseur $ {className? `$ {className}: ''}
}` `. Mais c'est beaucoup. [note: 'quelque chose' + undefined = 'quelque chose de sous-défini'. Conversion dynamique Js.Cela peut être réalisé avec les littéraux de modèle ES6:
la source
<input className={`${class1} ${class2}`}>
Vous pouvez créer un élément avec plusieurs noms de classe comme celui-ci:
Naturellement, vous pouvez utiliser une chaîne contenant les noms de classe et manipuler cette chaîne pour mettre à jour les noms de classe de l'élément.
la source
"
place de'
. Désolé pour ça.Voici comment vous pouvez le faire avec ES6:
Vous pouvez répertorier plusieurs classes et conditions et vous pouvez également inclure des classes statiques. Il n'est pas nécessaire d'ajouter une bibliothèque supplémentaire.
Bonne chance ;)
la source
Vanilla JS
Pas besoin de bibliothèques externes - utilisez simplement les chaînes de modèle ES6 :
la source
Peut-être que les noms de classe peuvent vous aider.
la source
Je ne pense pas que nous ayons besoin d'utiliser un package externe pour simplement ajouter plusieurs classes.
J'utilise personnellement
ou
le second au cas où vous auriez besoin d'ajouter ou de supprimer des classes de façon conditionnelle.
la source
En ajoutant simplement, nous pouvons filtrer les chaînes vides.
la source
Vous pouvez créer un élément avec plusieurs noms de classe comme celui-ci, j'ai essayé ces deux façons, son bon fonctionnement ...
Si vous importez un fichier CSS, vous pouvez suivre cette procédure: Méthode 1:
voie 2:
**
Si vous appliquez css en interne:
la source
Vous pouvez effectuer les opérations suivantes:
Une solution courte et simple, j'espère que cela vous aidera.
la source
Cela peut être fait avec https://www.npmjs.com/package/clsx :
https://www.npmjs.com/package/clsx
Installez-le d'abord:
Importez-le ensuite dans votre fichier de composant:
Utilisez ensuite la fonction importée dans votre composant:
la source
Tard dans la fête, mais pourquoi utiliser un tiers pour un problème aussi simple?
Vous pouvez soit le faire comme l'a mentionné @Huw Davies - la meilleure façon
Les deux sont bons. Mais l'écriture peut devenir complexe pour une grande application. Pour le rendre optimal, je fais les mêmes choses ci-dessus mais je le mets dans une classe d'aide
L'utilisation de ma fonction d'aide ci-dessous, me permet de garder la logique séparée pour les modifications futures, et me donne également plusieurs façons d'ajouter les classes
ou
Ceci est ma fonction d'aide ci-dessous. Je l'ai mis dans un helper.js où je garde toutes mes méthodes courantes. Étant une fonction aussi simple, j'ai évité d'utiliser une tierce partie pour garder le contrôle
la source
Vous pouvez utiliser des tableaux puis les joindre en utilisant l'espace.
Cela se traduira par:
la source
Je sais que c'est une réponse tardive, mais j'espère que cela aidera quelqu'un.
Considérez que vous avez défini les classes suivantes dans un fichier css « primaire », « font-i », « font-xl »
ferait l'affaire!
Pour plus d'informations: https://www.youtube.com/watch?v=j5P9FHiBVNo&list=PLC3y8-rFHvwgg3vaYJgHGnModB54rxOk3&index=20
la source
pour plus de classes en ajoutant
la source
Utilisation de l'exemple TodoTextInput.js de Facebook
remplacer les noms de classe par du code js ordinaire vanilla ressemblera à ceci:
la source
Si vous n'avez pas envie d'importer un autre module, cette fonction fonctionne comme le
classNames
module.Vous pouvez l'utiliser comme ceci:
la source
function classNames(rules) { return Object.entries(rules) .reduce( (arr, [cls, flag]) => { if (flag) arr.push(cls); return arr }, [] ).join(" ") }
C'est ce que je fais:
Composant:
Composant appelant:
la source
J'utilise React 16.6.3 et @Material UI 3.5.1, et je peux utiliser des tableaux dans className comme
className={[classes.tableCell, classes.capitalize]}
Donc, dans votre exemple, ce qui suit serait similaire.
la source
Utilisez https://www.npmjs.com/package/classnames
importer classNames à partir de 'classnames';
Peut utiliser plusieurs classes en utilisant des comas séparés:
Peut utiliser plusieurs classes en utilisant des comas séparés avec condition:
L'utilisation de tableaux comme accessoires pour classNames fonctionnera également, mais donne un avertissement, par exemple
la source
J'utilise le package rc-classnames .
Vous pouvez ajouter des classes dans n'importe quel format (tableau, objet, argument). Toutes les valeurs véridiques des tableaux ou des arguments et des clés dans les objets qui sont égales pour
true
être fusionnées ensemble.par exemple:
la source
Je
bind
classNames
au module CSS importé dans le composant.classnames
donne la possibilité de déclarerclassName
pour un élément React d'une manière déclarative.ex:
la source
Je l'utilise habituellement comme ceci: (dans votre cas)
Quand il s'agit de JSX et (généralement) nous avons du json ... que vous bouclez ... composant . map , plus quelques conditions pour vérifier si la propriété json existe pour rendre le nom de la classe en fonction de la valeur de la propriété de JSON. Dans l'exemple ci-dessous, component_color et component_dark_shade sont des propriétés de component.map ()
Sortie:
<div class="component no-color light" ....
Ou: en<div class="component blue dark" ....
fonction des valeurs de la carte ...la source
Lorsque j'ai plusieurs classes différentes, j'ai trouvé les éléments suivants utiles.
Le filtre supprime toutes les
null
valeurs et la jointure place toutes les valeurs restantes dans une chaîne séparée par des espaces.la source