2016-11-16 11 views
3

私のprops.updateBuildingが機能しない理由を理解できません。React Propsが定義されていません

次作品小道具は、renderメソッド

class Buildings extends Component { 
    constructor(props) { 
     super(props); 
    } 

    componentWillMount() { 
    this.props.fetchBuildings(); 
    } 

    renderBuildings(building) { 
    return (
     <div> 
      <p> {building.name}</p> 
     </div> 
    ); 
    } 


    render() { 
    return (
     <div> 
     {this.props.buildings.map(this.renderBuildings)} 
     <button type="button" className="btn btn-success" onClick={this.props.updateBuilding.bind(this, 1)}>Edit</button> 
     </div> 
    ); 
    } 
} 

function mapStateToProps(state) { 
    return { buildings: state.buildings.all }; 
} 
function mapDispatchToProps(dispatch){ 
    return bindActionCreators({ fetchBuildings, updateBuilding}, dispatch); 
} 

内にあるしかし、私は以下のようなrenderBuildings方法にthis.props.updateBuildingを入れて...

renderBuildings(building) { 
    return (
     <div> 
      <p> {building.name}</p> 
      <button type="button" className="btn btn-success" onClick={this.props.updateBuilding.bind(this, building.id)}>Edit</button> 
     </div> 
    ); 
    } 

私はエラーを取得する:

Cannot read property 'props' of undefined 

プロupdateBuildingsは、レンダービルディングメソッドの中にあるときに何が起こっているのか分かりません。

答えて

6

あなたはこのエラーをよく読んでいません。 propsが定義されていない場合、propsと呼ばれるものは未定義です。これはthisです。私の場合は

this.props.buildings.map(this.renderBuildings.bind(this)) 
2

2番目のパラメータで

this.props.buildings.map(this.renderBuildings, this)

またはそれをバインドを渡すことによってmap関数のコンテキストを設定することができます、私はコンストラクタに引数としてpropsを追加するのを忘れていました。

constructor(props) { 
    super(props); 
} 
7

:手動で試しインライン

this.props.buildings.map(this.renderBuildings.bind(this))

関連する問題