2017-10-09 11 views
0

私はコンポーネントを作成し、userReducerからデータを取得し、それを小道具に変換しましたが、データをコンソール(つまりユーザーの配列)にするとレンダリング方法では、しかし、私は、関数にデータを渡すと、配列をループしようとすると、私はエラー配列をループすることができません

キャッチされない例外TypeError下に取得しています:未定義

のプロパティ「マップ」を読み取ることができません私は理解していないです私が作るんでした間違い。

import React, {Component} from 'react'; 
import PropTypes from 'prop-types'; 
import {connect} from 'react-redux' 
import * as userActions from '../../actions/userActions' 
class HomePage extends Component { 
    constructor(props){ 
     super(props); 
     this.state = { 
      isLoading :true 
     } 
    } 
    componentDidMount(){ 
     const {dispatch} = this.props 
     dispatch(userActions.loadUsers()); 
    } 
    renderData(data){ 
     debugger 
     data.map(item=>{ 
      return (<div> 
       <h1>{item.id}</h1> 
      </div>) 
     }) 
    } 
    render() { 
     // if(!this.props.usersReducer) return <p>Loading ....</p> 
     return (
      <div> 
       {console.log(this.props.userReducer.data)} 
       {this.renderData(this.props.userReducer.data)} // if i comment this line i can see the users array in console but if i uncomment this line i am getting undefined in console for console.log(this.props.userReducer.data) too 
      </div> 
     ); 
    } 
}  
HomePage.propTypes = {}; 
HomePage.defaultProps = {};  
const mapStateToProps = (state, props) => 
    ({ 
     userReducer : state.userReducer 
    }) 
export default connect(mapStateToProps)(HomePage); 
+0

「this.props.userReducer.data」の値は何ですか? – imcvampire

+0

divを返す理由は何ですか? 翻訳方法に問題があると思います。 –

+0

'debugger'を削除し、' renderData'に欠落した戻りを追加してください。 – dostu

答えて

0

userReducer.dataがそれにmap関数を呼び出す前propsで利用可能な場合は、チェックを追加します。また

renderData(data){ 
    return data.map(item=>{ 
     return (<div> 
      <h1>{item.id}</h1> 
     </div>) 
    }) 
} 

render() { 
    // if(!this.props.usersReducer) return <p>Loading ....</p> 
    const { userReducer: { data } } = this.props; 
    return (
     <div> 
      {console.log("data ===== > ", data)} 
      {data 
       ? this.renderData(data) 
       : (<p>Loading ....</p>) 
      } 
     </div> 
    ); 
} 
0

とは

componentWillMount(){ 
    const {dispatch} = this.props 
    dispatch(userActions.loadUsers()); 
} 

は必ずレンダリングする前に、データをチェックする部品を取り付ける前に、派遣loadUsers()を呼び出します。私は地図をチェックするときにそれを実装することを提案したいと思います。

renderData(data){ 
    if (!data) { 
    return (<div>Loading user data...</div>); 
    } else { 
    data.map(item=>{ 
     return (<div> 
      <h1>{item.id}</h1> 
     </div>) 
    }); 
    } 
} 
+0

レンダリング機能の内部でこのチェックを行う方がよいでしょう。 'userReducer.data'が空の場合、' renderData'の実行を防ぎます。 – Abhijith