Comment combiner plusieurs de style en ligne d'objets?
À Réagir, vous pouvez clairement de créer un objet et de le définir comme un style en ligne. j'.e.. mentionnés ci-dessous.
var divStyle = {
color: 'white',
backgroundImage: 'url(' + imgUrl + ')',
WebkitTransition: 'all', //note the capital 'W' here
msTransition: 'all' //'ms' is the only lowercase vendor prefix
};
var divStyle2 = {fontSize: '18px'};
React.render(<div style={divStyle}>Hello World!</div>, mountNode);
Comment puis-je combiner plusieurs objets et de leur attribuer ensemble?
- Ce ne que les deux objets se ressemblent?
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de Réagir Natif, vous pouvez utiliser la notation de tableau:
Voir le docs pour plus d'info.
<View style={this.state.error == false ? styles.base : [styles.base, {backgroundColor: 'red'}]} />
Vous pouvez utiliser la propagation de l'opérateur:
<div style={{ ...LEGEND_STYLE.box_base, ...{ 'background': '#123456' } }} />
<div style={LEGEND_STYLE.box_gen('#123456')}
de toute façon, il n'est donc pas une grosse affaire pour moiVous pouvez faire cela avec
Object.assign()
.Dans votre exemple, vous voulez faire:
Que la fusion des deux styles. Le deuxième style remplacera le premier si il y a correspondance de propriétés.
Que Brandon a noté, vous devez utiliser
Object.assign({}, divStyle, divStyle2)
si vous souhaitez réutiliserdivStyle
sans la fontSize appliquée.J'aime l'utiliser pour faire des composants avec des propriétés par défaut. Pour exemple, voici un petit apatrides composant avec un défaut
margin-right
:Afin que nous puissions rendre à quelque chose comme ceci:
Ce qui va nous donner le résultat:
Object.assign()
dans une manière qui pourrait conduire à des effets indésirables. Voir la réponse ici a plus de solution fiable.Object.assign()
dans votre réponse. la première, dans les quelques premières phrases, est un exemple de la mauvaise utilisation que j'ai identifié (c'est à dire, si l'OP a fait ce que vous conseillent dans votre premiercode
bloc, il/elle avait muter{divStyle}
). la seconde manière-c'est à dire, en l'enveloppant dans une fonction que vous avez, de fonctionner, mais la réponse n'est pas clairement que vous êtes de travail autour deObject.assign()
s'commun 'chasse aux sorcières' wrt immutabilité (bien que personnellement je pense que c'est un peu fastidieux à écrire un personnalisé apatrides fonction pour chaque composant par défaut).Contrairement à Réagir Natif, nous ne pouvons passer éventail de styles de Réagir, comme
De Réagir, nous avons besoin de créer l'objet unique de styles avant de le transmettre à la propriété de style. Comme:
Nous avons utilisé ES6 La propagation de l'opérateur de combiner les deux styles. Vous pouvez également utiliser Objet.assign() ainsi pour le même but.
Cela fonctionne aussi si vous n'avez pas besoin de stocker votre style dans un var
Object.assign()
est une solution facile, mais l' (actuellement) réponse sommet's de l'utilisation de celui — ci- alors que l'amende juste pour faire des apatrides, des composants, de causer des problèmes pour l'OP de l'objectif souhaité de la fusion de deuxstate
objets.Avec deux arguments,
Object.assign()
va muter en réalité le premier objet en place, affectant l'avenir instanciations.Ex:
Deux possibilités style configs pour une boîte:
Si nous voulons que tous nos boites par défaut "boîte" de styles, mais que vous souhaitez le remplacer certains avec une couleur différente:
Une fois
Object.assign()
s'exécute, les 'styles.case " objet est changé pour de bon.La solution est de passer d'un objet vide à
Object.assign()
. Ce faisant, vous indiquez la méthode utilisée pour produire un NOUVEL objet avec les objets que vous la transmettre. Comme:Cette notion d'objets de la mutation en place est essentielle pour Réagir, et la bonne utilisation de
Object.assign()
est vraiment très utile pour l'utilisation des bibliothèques comme Redux.Vous pouvez également combiner des classes avec inline style comme ceci:
Tableau notaion est la meilleure façon de combiner les styles de réagir natif.
Cela montre comment combiner 2 objets Style,
cela montre comment combiner le Style de l'objet et la propriété,
Cela fonctionne sur n'importe quel réagir application native.
React
, pasReact Native
Pour ceux à la recherche de cette solution de Réagir, Si vous souhaitez utiliser la propagation de l'opérateur à l'intérieur de style, vous devez utiliser: babel-plugin-transformer-objet-repos-propagation.
L'installer par npm module et configurer votre .babelrc en tant que tel:
Vous pouvez ensuite utiliser comme...
Plus d'infos: https://babeljs.io/docs/en/babel-plugin-transform-object-rest-spread/
D'aller encore plus loin, vous pouvez créer un les noms de classe-comme fonction d'assistance:
Et ensuite l'utiliser de façon conditionnelle dans vos composants:
Donc, fondamentalement, je suis à la recherche dans le mauvais sens. De ce que je vois, ce n'est pas une Réagir question spécifique, plus d'un JavaScript question comment puis-je combiner deux objets JavaScript ensemble (sans casser les nommés de la même façon propriétés).
Dans ce StackOverflow réponse, il l'explique. Comment puis-je fusionner les propriétés de deux objets JavaScript de façon dynamique?
En jQuery que je peux utiliser l'extension de la méthode.
À Étendre sur ce que @PythonIsGreat dit, j'ai créer une fonction globale qui va le faire pour moi:
Profondément s'étend aux objets dans un nouvel objet et permet un nombre variable d'objets comme paramètres. Cela vous permet de vous faire quelque chose comme ceci:
J'ai construit un module pour cela, si vous souhaitez ajouter des styles en fonction d'une condition
comme ceci:
https://www.npmjs.com/package/react-native-multiple-styles
Façons de inline style: