2017-05-18 66 views
0

我是Redux和reducer的全新产品。我不能让我的第一个代码工作。任何人都可以告诉我为什么(index.js)引用BooksReducer?我没有这样的道具,组件或文件。它会抛出一个像这样的错误: “未捕获的错误:Reducer”books“在初始化期间返回undefined。如果传递给reducer的状态未定义,则必须显式返回初始状态。我如何初始化它?如何初始化reducer? Reducer返回undefined

reducer_book.js:

export default function(){ 
    return 
    [ 
     {title: 'Crash bandicoot'}, 
     {title: 'Crash bandicoot 2: Cortex strikes back'}, 
     {title: 'Crash bandicoot 3: Warped'}, 
     {title: 'Crash Team Racing'}, 
     {title: 'Crash Bash'} 
    ] 
} 

index.js:

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

    export default rootReducer; 

App.js:

export default class App extends Component { 
    render() { 
     return (
     <div> 
      <BookList /> 
     </div> 
    ); 
    } 
    } 

book_list.js:

class BookList extends Component{ 

    renderList(){ 
     return this.props.books.map((book) => { 
      return( 
      <li key={book.title} className="list-group-item">{book.title}</li> 
     ); 
     }); 
    } 


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

    function mapStateToProps(state){ 
     return { 
     books: state.books 
    }; 
    } 

    export default connect(mapStateToProps)(BookList); 
+0

您需要将您的reducer导入到index.js中,或者只需使用reducer函数内联。 –

+0

我导入它:/从'./reducer_books'导入BooksReducer;但是,当我在reducer_books文件中没有像这样的组件时,仍然不明白为什么它引用BooksReducer。 – JustMatthew

+0

BooksReducer是您从该文件导出的“默认”导出。它的var BooksReducer = require(“./ books_reducer”)的等价性; 你可以任意命名。 –

回答

1

看起来就像你在reducer中的return声明后有一个换行符,所以这可能会导致Javascript将它解释为return;而不是return [ ];。尝试将阵列的开放式括号移至与return关键字相同的行。

+0

有趣的评论,你有好眼睛:)现在我有另一个错误:“未捕获的ReferenceError:renderList没有在BookList.render定义” – JustMatthew

相关问题