2016-03-27 3 views
0

Ich habe ein Problem mit dem Anwenden von Stilen auf meine React-Komponenten. Ich generierte Vorlage über Yeoman zu meinem Projekt. Es hat viele Konfigurationsdateien erstellt, nicht nur webpack.config.js und deswegen bin ich ein wenig verwirrt. Als Liesmich-Datei des React-Generators sagt es unterstützt einige Features, ohne es zu installieren: * Verschiedene unterstützte Stilsprachen (Sass, Scss, weniger, Stift) * Style-Transformationen über PostCSS Entsprechend zeige ich einen Teil von cfg/default.jsWie man Stile über css-Module auf die reagierende Komponente anwendet

'use strict'; 
 
const path = require('path'); 
 
const srcPath = path.join(__dirname, '/../src'); 
 
const dfltPort = 8000; 
 
function getDefaultModules() { 
 
    return { 
 
    preLoaders: [{ 
 
     test: /\.(js|jsx)$/, 
 
     include: srcPath, 
 
     loader: 'eslint-loader' 
 
     }], 
 
    loaders: [ 
 
     { 
 
     test: /\.css$/, 
 
     loader: 'style-loader!css-loader!postcss-loader' 
 
     }, 
 
     { 
 
     test: /\.sass/, 
 
     loader: 'style-loader!css-loader!postcss-loader!sass-loader?outputStyle=expanded&indentedSyntax' 
 
     }, 
 
     
 
     { 
 
     test: /\.scss/, 
 
     loader: 'style-loader!css-loader!postcss-loader!sass-loader?outputStyle=expanded' 
 
     }, 
 
     { 
 
     test: /\.less/, 
 
     loader: 'style-loader!css-loader!postcss-loader!less-loader' 
 
     }, 
 
     { 
 
     test: /\.styl/, 
 
     loader: 'style-loader!css-loader!postcss-loader!stylus-loader' 
 
     },

ich denke, das Teil für die Umwandlung von .scss Dateien verantwortlich ist.

Also in meinem todosStyle.scss Datei habe ich diesen Code bekam:

 .todos { 
    display: flex; 
    flex-flow: row wrap; 
    justify-content: center; 
    width: 100%;} 
    .input { 
    display: block; 
    text-align: center;} 
    .button { 
    width: 60px; 
    margin: 5px; } 
    .label { 
    display: block; 
    border: solid 1px; } 

Base auf diesem Styling Ich möchte meine Komponente stylen Todos.jsx:

import React from "react"; 

    import Todo from "./Layout/Todo.jsx"; 
    import TodoStore from "../../stores/TodoStore.jsx"; 
    import * as TodoActions from "../../actions/TodoActions.jsx"; 
    import styles from '../../styles/todosStyle.scss'; 

    export default class Todos extends React.Component { 
     constructor() { 
     super(); 
     this.getAllTodos = this.getAllTodos.bind(this); 
     this.state = { 
      todos: TodoStore.getAll(), 
     }; 
     } 

     getAllTodos(){ 
      this.setState({ 
      todos: TodoStore.getAll(), 
     }); 
     } 

     componentWillMount(){ 
     TodoStore.on('change', this.getAllTodos); 
     } 

     componentWillUnmount(){ 
     TodoStore.removeListener('change', this.getAllTodos); 
     } 

     createTodo(){ 
     if (this.refs.addTodo.value != ''){ 
      TodoActions.createTodo(this.refs.addTodo.value); 
      this.refs.addTodo.value = ''; 
     } 
     } 

     deleteTodo(todo){ 
     TodoActions.deleteTodo(todo); 
     } 

     completeTodo(todo){ 
     TodoActions.completeTodo(todo); 
     } 

     render() { 
     const {todos} = this.state; 
     const TodoComponents = todos.map(todo =>{ 
      return <Todo key={todo.id} {...todo} completeTodo={this.completeTodo.bind(this, todo)} deleteTodo={this.deleteTodo.bind(this, todo)}/>; 
     }); 

     return (
      <div> 
      <h1>Todos</h1> 
      <div class = {styles.input}> 
       <label class= {styles.label}>Add new Todo</label> 
       <input ref="addTodo"/> 
       <button class={styles.button} onClick = {this.createTodo.bind(this)}><i class="fa fa-plus-square-o"></i></button> 
      </div> 
      <ul class={styles.todos} class="row">{TodoComponents}</ul> 
      </div> 
     ); 
     } 
    } 

aber Styling wird nicht angewendet, obwohl Ich habe importiert todosStyle.scss

Könnte mir jemand helfen?

Antwort

0

Nur eine Anmerkung, es ist gut, hinzufügen $ auf Ihrem Loader Test Eigenschaften z. test: /.scss$/, um nur das Ende der Datei zu finden, glaube ich.

Ich habe dies noch nicht gesehen "importieren Stile von '../../styles/todosStyle.scss';" diese Art sagt, dass Sie Stile aus Ihrer Sass-Datei exportieren, vielleicht importieren * als Stil ... könnte funktionieren, aber ich habe diesen Ansatz nicht verwendet.

versuchen Sie dies. require ('../../styles/todosStyle.scss'); Dies wird Ihr CSS mit dem Javascript bündeln. dann verwenden Sie einfach die Klasse, wie Sie normalerweise auf Ihrer Renderfunktion würden.

auch beachten Sie; Wenn Sie eine separate Datei für Ihre CSS erstellen möchten, können Sie dies mit Plugins tun.

0

Sie verwenden CSS-Module, aber sie haben sie nicht eingeschaltet in Ihrer Webpack Config auf:

loader: 'style-loader!css-loader!postcss-loader'

wird

loader: 'style-loader!css-loader?modules!postcss-loader'

Gemäß der CSS-loader readme https://github.com/webpack/css-loader#css-modules .

Verwandte Themen