2016-11-16 5 views
0

, also entwickle ich eine kleine Buchhaltungsanwendung in React + Redux. Aber aus irgendeinem Grund wird die Ansicht nicht dargestellt, und ich weiß nicht warum. Der Code verursacht auch keinen Fehler.React und Redux rendern nicht Ansicht

Hier ist die Struktur meiner App.

src 
----actions 
----components 
      ----App.js 
----containers 
      ----bookList.js 
----reducers 
      ----book.js 
      ----index.js 
--index.js 

Hier sind die einzelnen Dateien

index.js/src

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import App from './components/App.js'; 
import {Provider} from 'react-redux'; 
import {createStore} from 'redux'; 
import rootReducer from './reducers/index.js'; 

let store = createStore(rootReducer); 


ReactDOM.render(
    <Provider store={store}> 
     <App /> 
    </Provider>, 
    document.getElementById('root') 
); 

/components/App.js

import React from 'react'; 
import bookList from '../containers/bookList.js'; 

const App =() => { 
    return (
    <div> 
     <bookList /> 
    </div> 
) 
} 

export default App; 

/containers/bookList.js

import React, {Component} from 'react'; 
import {connect} from 'react-redux'; 

class bookList extends Component { 
    renderList() { 
     return this.props.books.map(book => { 
      return <li key={book.title}>{book.title}</li> 
     }); 
    } 

    render() { 
     return (
      <ul className='list-group col-sm-4'> 
       {this.renderList()} 
      </ul> 
     ) 
    } 
} 

const mapStateToProps = (state) => { 
    return { 
     books: state.books 
    } 
} 

export default connect(mapStateToProps)(bookList); 

/reducers/index.js

import {combineReducers} from 'redux'; 
import books from './books.js'; 

const rootReducer = combineReducers({ 
    books: books 
}); 

export default rootReducer; 

/reducers/book.js

const books =() => { 
    return [ 
     {title: 'JavaScript'}, 
     {title: 'Harry Potter'}, 
     {title: 'Some Random Title'} 
    ] 
} 

export default books; 

Wie ich schon am Anfang erwähnt, absolut keine Fehler nach oben geworfen, und alle console.log Aussagen I Versuch, in der Datei "bookList.js" auszuführen, wird nicht angezeigt.

Diese Datei wird nicht vom Babel-Compiler gelesen.

Wenn ich jedoch die Funktion "Buchliste" protokolliere, die ich von "bookList.js" in "App.js" importiere, wird eine Verbindungsfunktion ausgedruckt. Also wird diese Datei eindeutig importiert.

+0

Definieren Sie "wird nicht rendern". Gibt es Elemente auf der Seite? Oder meinst du, der Laden wird nicht an die Elemente weitergegeben? – shennan

+0

@shennan - Es scheint, als würde der Laden nicht an die Elemente weitergegeben.Daher ruft die Funktion mapStateToProps das state-Objekt ab und gibt die Liste der Bücherrequisiten an den bookList-Container zurück. Dies scheint jedoch nicht zu passieren, und wenn console.log (state) von innerhalb von mapStateToProps, bekomme ich keine Ausgabe. –

+0

@ZaidHumayun Was ist ein Ergebnis, wenn Sie console.log (this.props.books) in renderList vor return statement setzen? – Grajek

Antwort

2

Sie können dies überprüfen: User-Defined Components Must Be Capitalized.

Falls der Link ungültig:

Wenn ein Elementtyp mit einem Kleinbuchstaben beginnt, es bezieht sich auf eine integrierte Komponente wie oder und die Ergebnisse in einem String 'div' oder 'span'-React.createElement geben. Typen, die mit einem Großbuchstaben beginnen, wie z. B. kompilieren zu React.createElement(Foo) und entsprechen einer Komponente definiert oder importiert in Ihrer JavaScript-Datei.
Wir empfehlen, Komponenten mit einem Großbuchstaben zu benennen. Wenn Sie eine Komponente haben, die mit einem Kleinbuchstaben beginnt, weisen Sie sie einer Großbuchstabenvariablen zu, bevor Sie sie in JSX verwenden.

+0

Hey, danke für diese Antwort. Dies bietet eine detailliertere Erklärung zu meiner Antwort unten. –

0

Okay, ich habe eine Antwort für euch, und ich denke, es wird dich absolut umhauen, so wie es meiner war.

Also, das war alles, was ich tun musste, war 'BookList' in 'BookList' in jedem Vorkommen des Wortes in der App.js-Datei und der bookList.js-Datei zu ändern.

Ich habe keine Ahnung, warum es so funktioniert. Wenn jemand das erklären könnte, wäre ich sehr dankbar. Weil es das erste Mal ist, dass ich auf Code gestoßen bin, der wegen eines Unterschieds in der Benennungssyntax scheitert.

Verwandte Themen