49 votes

Comment appliquer du CSS et du Style à un composant Réagir

J'ai été à la recherche, cependant, j'ai eu peu de chance de trouver quelque sorte de style de la React.js fichier que j'ai créé, je me suis converti à partir d'une page web standard, de sorte que j'ai l'original CSS, cependant, je ne sais pas comment l'utiliser Réagir pour afficher la page avec le bon style.

Toute aide serait appréciée!

var NavBar = React.createClass({
  render: function() {
    return (
      /* NavBar */
      <div className="dark_bg_color">
        <img src="logo.png" />
        <div className="table_center">
          <div>
            <ul>
              <li>daily specials</li>
              <li>gift gallery</li>
              <li>events</li>
              <li><i className="fa fa-search" />&nbsp;search</li>
            </ul>
          </div>
        </div>
        <div className="right_nav">
          <div className="table_center">
            <div>
              <button type="button">Sign Up</button>
              <button type="button">Log In</button>
              <div className="vertical-line">&nbsp;</div>
              <button type="button">Cart</button>
            </div>
          </div>
        </div>
      </div>
    );
  }
});
ReactDOM.render(<NavBar />, document.getElementById('nav'));

var Gallery = React.createClass({
  render: function() {
    return (
      /* Gallery */
      <div >
        <div align="middle">
          <div id="head">
            <img id="pic" align="middle" max-width="100%" src="title_pic.png" />
            <div align="left" className="big">
              <div>
                <span>Dine with the Best</span>
                <div className="words">
                  <span>BonApp connects you with limited-time, exclusive meals and events offered by the city's best chefs.<br /><br /><br /><button type="button">JOIN BONAPP</button></span>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    );
  }
});
ReactDOM.render(<Gallery />, document.getElementById("Gallery"));

var WhatsNew = React.createClass({
  render: function() {
    return (
      <div  className="dark_bg_color">
        <h2 style={{marginBottom: 30}}>
          <span>What's New</span>
        </h2>
        <div className="autoplay">
          <img src="whatsnew0.png" />
          <img src="whatsnew1.png" />
          <img src="whatsnew0.png" />
        </div>
      </div>
    );
  }
});
ReactDOM.render(<WhatsNew />, document.getElementById("whatsnew"));

var BonEvents = React.createClass({
  render: function() {
    return (
      /* Events */
      <div id="events" className="dark_bg_color">
        <div className="box">
          <div className="box-text">
            <div className="horizontal-line" />
            <div><div className="horizontal-line" /><p>LES BON CADEAUX</p></div>
            <div className="horizontal-line" />
          </div>
        </div>
        <h2>
          <span>Bon Events</span>
        </h2>
        <div>
        </div>
      </div>
    );
  }
});
ReactDOM.render(<BonEvents />, document.getElementById("events"));

var IOS = React.createClass({
  render: function() {
    /* IOS */
    return (
      <div >
        <h2>
          <span />
        </h2>
      </div>
    );
  }
});
ReactDOM.render(<IOS />, document.getElementById("advertiseApp"));

var Footer = React.createClass({
  render: function() {
    return (
      /* Footer */
      <div>
        <div className="footer_center">
          <div>
            <ul>
              <li>ABOUT</li>
              <li>PRESS</li>
              <li>CONTACT</li>
              <li>SUPPORT</li>
              <li>BONAPP FOR RESTAURANTEURS</li>
            </ul>
          </div>
        </div>
        <div className="legal_center">
          <div>
            <ul>
              <li>Copyright © 2016 BonApp Dining Inc.</li>
              <li>Privacy Policy</li>
              <li>Legal</li>
            </ul>
          </div>
        </div>
      </div>
    );
  }
});
ReactDOM.render(<Footer />, document.getElementById("footer"));

47voto

Caleb Anthony Points 671

Une première lecture par le biais de votre question, il semble que votre CSS ne fonctionne pas lorsque vous Réagir-identifier' votre page web.

Il le devrait.

Si elle ne l'est pas, il y a autre chose qui auront besoin de plus de diagnostic pour les corriger. Récemment, j'ai réécrit un de mes projets à Réagir et a continué à utiliser le même fichier CSS et les choses travaillé.

Cependant, si vous demandez à propos de la meilleure façon d'aller à ce sujet...

Comme d'autres l'ont dit, Réagir préfère les styles en ligne.

Cependant, je n'ai pas. C'est salissant, peuvent être difficiles à changer, et obtient facilement maniables.

SCSS ou MOINS sont les meilleurs moyens à le style de Réagir.

Mais pourquoi? Voici quelques raisons:

Votre CSS Est Réutilisable

Si vous le style inline avec la Réagir de la sorte, il fonctionne grand pour un couple de composants.

Mais lorsque ces composants commencer à empiler vers le haut, vous commencez à vous rendre compte que vous êtes en utilisant les mêmes styles de nouveau et de nouveau. Qui suce.

Il est Facile de Faire des Changements

Lorsqu'un composant a besoin d'une mise à jour du style, vous n'avez plus à creuser par le biais de votre Réagissent code pour trouver le bon composant (ou était-ce le composant parent?) et de le corriger.

Au lieu de cela, il suffit d'utiliser le CSS comme vous l'avez toujours utilisé.

Vous N'Avez pas à vous Soucier de les Écraser

Dans la cascade de la partie de CSS, de styles en ligne sont à l'arrêt final. Ils écrasent tout.

Au premier abord, cela semble une excellente solution pour les styles que vous êtes à la mise en œuvre, et dans une brochure, site web, il serait peut-être bien. Mais quand vous commencez à travailler avec de plus grandes applications, vous exécutez les questions qui sont presque impossibles à résoudre.

Au lieu de combattre avec la cascade partie de CSS, de travailler avec elle et de garder vos styles dans le même lieu.

Vous Utilisez SCSS & un peu Partout

Le plus gros point pour moi, c'est oui, si vous travaillez à Réagir et que vous préférez les styles en ligne, ils peuvent fonctionner à merveille.

Mais qu'advient-il lorsque vous vous déplacez à tout autre cadre? Tout d'un coup, ces styles en ligne ne fonctionne pas si bien, et vous êtes de retour à l'écriture "normale" CSS avec le reste d'entre nous. Donc pourquoi changer les choses juste pour un cadre?

Je comprends, si vous travaillez à Réagir à temps plein et il est logique d'expérimenter de nouvelles pratiques exemplaires, mais pour la plupart d'entre nous, il n'est pas utile de réinventer la roue lorsque vous ne pouvez utiliser que la roue sur un modèle de voiture.

13voto

adriennetacke Points 1061

Si vous voulez garder les choses compartimentée, vous pouvez créer un .scss le fichier pour le composant spécifique vous sont style puis de l'importer dans votre fichier de composant.

Exemple:

Structure De Dossier:

components
|
|--Card
   |
   |--Card.js
   |--Card.scss
   |--index.js
|--Some Other Component Folder 

Card.js:

import React, { Component } from 'react';
import classes from './Card.scss';

export class Card extends Component {

    render () {
        return (
            <div className={`${classes.layout} col`}>
                <div className={`${classes.card} card`}>
                    <div className="card-image">
                        <ProviderImage />
                    </div>
                </div>
            </div>
        );
    }
}

export default Card;

Carte de.scss:

.layout {
    img {
        display: block;
        max-width: 372px;
        max-height: 372px;
        height: auto;
        width: auto;
    }
}

.card {
    width: 370px;
    height: 550px;
}

Cela permet de maintenir les styles contenus de ses composantes respectives.

7voto

Toby Points 4570

Techniquement, vous pouvez ajouter le CSS dans le document HTML <head> comme vous le feriez avec un fichier CSS. Tant que votre Réagissent les composants ont les mêmes classes (à l'exception évidemment appliqué en tant que className pas class) alors qu'il fonctionne.

Si vous êtes à la recherche de quelque chose de plus moderne et Javascript orienté, vous pouvez regarder dans les Modules CSS, et en savoir plus sur eux ici:

https://css-tricks.com/css-modules-part-1-need/

Il y a évidemment un peu plus d'une courbe d'apprentissage avec la deuxième approche, si.

4voto

Hamms Points 3471

Comme Vijay mentionné, Réagir préfère les styles en ligne.

Un modèle commun est chaque Composant d'un seul styles objet qui contient tous les styles utilisés dans le Composant, comme ceci:

var styles = {
  navBar: {
    backgroundColor: 'dark blue'
  },
  center: {
    textAlign: 'center'
  },
  rightNav: {
  },
  verticalLine: {
  },
};

var NavBar = React.createClass({
  render: function() {
    return (
      <div style={styles.navBar} >
        <img src="logo.png" />
        <div style={styles.center} >
          <div>
            <ul>
              <li>daily specials</li>
              <li>gift gallery</li>
              <li>events</li>
              <li><i className="fa fa-search" />&nbsp;search</li>
            </ul>
          </div>
        </div>
        <div style={styles.rightNav}>
          <div style={styles.center}>
            <div>
              <button type="button">Sign Up</button>
              <button type="button">Log In</button>
              <div style={styles.verticalLine} >&nbsp;</div>
              <button type="button">Cart</button>
            </div>
          </div>
        </div>
      </div>
    );
  }
});

1voto

Vinicius Vieira Points 370

Je pense que tout d'abord, vous devez importer vos css ou fichiers scss, je vous recommandons de le faire à la voie directe comme:

import "components/card/card";

Pour que cela fonctionne, vous devez avoir SASS chargeurs et webpack cours d'exécution dans votre projet.

Vous avez besoin d'avoir sass chargeurs dans votre webpack.config

  module: {
    loaders: [
      {test: /\.scss$/, loaders: ["style", "css", "sass"]},
      {test: /\.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader")},
      {test   : /\.woff|\.woff2|\.svg|.eot|\.ttf|\.png/, loader : 'url?prefix=font/&limit=10000&name=/assets/fonts/[name].[ext]'
      }
    ]

Je recoomed utiliser l' "sass-loader": "^3.0.0",

Le chargeur a besoin d'une solution de contournement pour fonctionner avec windows, sur mac, il fonctionne très bien:

  • Afficher les fichiers cachés sur option de dossier.

  • Allez dans le dossier "utilisateur/appData", il devrait être sur: C:\Users\user\AppData\Roaming\npm

  • Ajouter le windows de l'environnement de variable:NODE_PATH C:\Users\user\AppData\Roaming\npm\nodeModules

  • Exécutez la commande npm install-g

  • Fermez et rouvrez l'invite de commande.

Avec cela, vous pouvez charger sass et le compiler avec webpack, et je ne vous conseille de l'utiliser avec de réagir, c'est vraiment puissant.

Si vous n'êtes pas en utilisant webpack vous pouvez trouver plus ici: http://webpack.github.io/docs/tutorials/getting-started/

Et ici, vous pouvez vérifier et l'exemple de webpack processus de construction: Pourquoi mon webpack bundle.js et vendor.bundle.js tellement grand?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X