2016-11-16 11 views
0

私はReact + Reduxで小さなブックを保ちながらアプリケーションを開発しています。しかし、何らかの理由でビューがレンダリングされず、なぜ私はわかりません。コードはエラーをスローしません。ReactとReduxは表示をレンダリングしません

ここに私のアプリの構造です。ここで

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

個々のファイルは

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; 

私は絶対にエラーが投げていないされ、冒頭で述べたように、あらゆるにconsole.log文I bookList.jsファイルで実行しようとしましたが、表示されません。

そのファイルはBabelコンパイラによって読み取られていないようです。

しかしbookList関数をログに記録すると、bookList.jsからApp.jsにインポートされ、接続関数が出力されます。したがって、そのファイルは明確にインポートされています。

+0

「レンダリングしません」と定義します。ページに要素がありますか?または、店舗が要素に渡されていないことを意味しますか? – shennan

+0

@スンナン - 店舗が要素に渡されていないようです。したがって、mapStateToProps関数は状態オブジェクトを取得し、書籍propsのリストをbookListコンテナに返します。しかし、それは起こっていないようで、mapStateToPropsの中からconsole.log(state)を呼び出すと、出力が得られません。 –

+0

@ ZaidHumayun return文の前にrenderListにconsole.log(this.props.books)を置いたときの結果は? – Grajek

答えて

2

User-Defined Components Must Be Capitalizedをチェックアウトすることができます。

場合には無効になりリンク:要素タイプは小文字で始まる場合

は、それが文字列'div'またはReact.createElementに渡さ'span'に内蔵様成分又はその結果を指します。コンパイルのような大文字で始まるタイプはReact.createElement(Foo)になり、JavaScriptファイルで定義またはインポートされたコンポーネントに対応します。
大文字のコンポーネントに名前を付けることをお勧めします。小文字で始まるコンポーネントがある場合は、JSXで使用する前に大文字の変数に割り当てます。

+0

ねえ、この回答に感謝します。これは、以下の私の答えに、より詳細な説明を提供します。 –

0

私はあなたたちのために答えを持っています。私はそれが私のようにあなたの心を爆破しようとしていると思います。

これを得るには、App.jsファイルとbookList.jsファイル内の単語が出現したときに、 'bookList'を 'BookList'に変更するだけでした。

なぜこのように動作するのかわかりません。もし誰かがそれを説明できたら、私はとても感謝しています。これは命名構文の違いのため、コードが失敗したのは初めてです。

関連する問題