Réagir JSX Style de la Balise d'Erreur sur le Rendu

voici ma fonction de rendu react rendu:function(){

  return (
          <div>
                <p className="rr">something</p>


                  <style>
                    .rr{
                      color:red;
                    }
                  </style>
          </div>    
        )
}

Cela me donne cette erreur "JSX: Error: Parse Error: Line 22: Unexpected token :"

Qu'est-ce qui ne va pas ici? Est-ce que je peux intégrer le css normal complet dans un composant react?

30
demandé sur daniula 2014-12-17 19:39:57

7 réponses

JSX n'est qu'une petite extension de javascript, ce n'est pas son propre langage de template. Donc vous le feriez comme dans javascript:

        return (<div>
            <p className="rr">something</p>


              <style>{"\
                .rr{\
                  color:red;\
                }\
              "}</style>
      </div>)

http://jsfiddle.net/r6rqz068/

il n'y a Toutefois pas de bonne raison de le faire.

27
répondu Esailija 2014-12-17 20:54:39

Facile à faire avec es6 chaînes du modèle (ce qui permet des sauts de ligne). Dans votre méthode de rendu:

const css = `
    .my-element {
        background-color: #f00;
    }
`

return (
    <div class="my-element">
        <style>{css}</style>
        some content
    </div>
)

en ce qui concerne le cas d'utilisation, je le fais pour un div avec quelques cases à cocher que j'utilise pour déboguer, que je voudrais contenir dans un fichier pour une suppression facile plus tard.

45
répondu Sebastian 2015-12-10 11:01:01
return (
  <div>
    <p style={{color: "red"}}>something</p>
  </div>
);

DÉMO: http://jsfiddle.net/chantastic/69z2wepo/329/


Note: JSX ne supporte pas la syntaxe HTML pour l'attribut style

déclarer les propriétés en utilisant les noms de propriétés camelCase, par exemple,

{ color: "red", backgroundColor: "white" }
http://facebook.github.io/react/tips/inline-styles.html

21
répondu chantastic 2014-12-18 04:24:53

"classe" est un mot réservé en JavaScript. Utilisez plutôt "className".

en outre, vous devez vous rappeler que vous utilisez JSX, pas HTML. Je ne crois pas que jsx analysera vos étiquettes. Une meilleure approche est de créer un objet avec vos styles, puis appliquez le style (voir ci-dessous).

var styles = {
  color:"red";
}

return (
  <div>
    <p style={styles}>something</p>
  </div>    
)
8
répondu Tyler McGinnis 2014-12-17 17:05:31
  1. Créer une fonction pour gérer l'insertion de la balise style.
  2. ajouter le CSS que vous voulez à une variable string.
  3. ajouter la variable au JSX retourné à l'intérieur de votre <style> balise.

    renderPaypalButtonStyle() {
        let styleCode = "#braintree-paypal-button { margin: 0 auto; }"
        return (
            <style>{ styleCode }</style>
        )
    }
    
4
répondu Michael J. Calkins 2016-04-19 17:38:03

Cela peut être fait en utilisant backtick """ comme ci-dessous

return (<div>
        <p className="rr">something</p>


          <style>{`
            .rr{
              color:red;
            }
          `}</style>
  </div>)
3
répondu Kamran Syed 2015-12-09 07:07:18

c'est Ce que j'ai fait:

  render(){
    var styleTagStringContent = 
    ".rr {"+
       "color:red"+
    "}";
    return (
      <style type="text/css">
        {styleTagStringContent}
      </style>
    );
1
répondu Con Antonakos 2015-09-11 19:22:51