2016-12-15 1 views
2

Est-il possible de définir des styles CSS en ligne par une fonction? J'essaie de faire ceci:ReactJS: Définition des attributs de style avec des fonctions

render() { 
var listStyle = { 
    position: "relative", 
    display:() => { 
     console.log("Still alive") 
     if(this.state.open) { 
      return "block"; 
     } 
     else return "none"; 
    } 
return <li style={listStyle}> 
..... 
} 

En vain. Il ne consignera même pas "Toujours en vie", donc la fonction ne s'exécute même pas. Je sais qu'il n'y a aucun problème à assigner des fonctions aux objets dans JS, alors qu'est-ce qui donne?

+1

Il attend une chaîne, pas une fonction, donc il ne prend pas la peine d'exécuter votre fonction. Bien sûr, JS vous permet de faire cela, mais cela ne signifie pas que la réaction l'attend ou le gérera comme vous l'attendez. Vous pouvez également exécuter une fonction qui renvoie une chaîne si vous le souhaitez. –

+0

Ouais, j'ai oublié la fonction (heureusement) ne s'exécuterait pas simplement parce qu'il existe. Merci pour l'information! – Rafael

Répondre

3

Vous pouvez essayer de faire comme ça, plus simple,

var listStyle = { 
    position: "relative", 
    display:this.state.open?'block':'none' 
} 

Je pense que l'objet de style seulement l'accès à la valeur des propriétés

mais si vous aimez vraiment la fonction. vous pouvez utiliser l'auto-exécution fonction anonyme pour le faire fonctionner

var listStyle = { 
    position: "relative", 
    display: (()=>{ 
     console.log('alive') 
     if(this.state.open){ 
      return 'block' 
     }else{ 
      return 'none' 
     } 
    })() 

} 
+0

J'aime votre deuxième exemple :) Merci pour le partage – EQuimper

+0

OK, donc j'ai oublié que je pouvais() la fonction pour l'exécuter. Il ne s'exécuterait pas tout seul parce que je mettrais "retour" là-dedans. Merci! Aussi, oui, la première alternative est plus élégante à coup sûr. Pour une raison ou pour une autre, cela m'a complètement dérangé de le faire. – Rafael

2

Vous pouvez aller avec ce

const listStyle = { 
    position: 'relative' 
} 


const checkDisplay = open => { 
    if (open) { 
    return "block" 
    } 
    return "none"; 
} 

<li style={{...listStyle, display: checkDisplay(this.state.open)}}></li> 

Permettez-moi de savoir si ce travail. J'espère que cela peut vous aider :)

+1

Ça marche! Je vais avec l'autre réponse parce que c'est plus élégant, mais prenez ce +1, vous le méritez. ;) – Rafael

+0

Parfait, heureux d'entendre ce travail :). Et oui bon choix pour l'autre je l'aime aussi;) – EQuimper