2017-03-06 44 views
0

オブジェクトをプッシュするために配列の状態を表示できません。 CreateCardsコンポーネントは、addCart関数で適切な情報を返します。Uncaught TypeError:未定義のプロパティを読み取ることができません

constructor(){ 
    super(); 
    this.state = { 
     cards: [] 
    } 
} 


addCart(title, qte){ 
    console.log(title); 
    console.log(qte); 
    console.log(this.state.cards); 
    //let array = this.state.cards; 
    //array.push({title: title, qte: qte}); 
} 

render(){ 
    console.log(this.state.string); 
    return (
     <div> 
      <div> 
       <h2>Panier</h2> 

      </div> 
      { 
       data.map((bike, index)=>{ 
        return (
         <CreateCards key={index} title={bike.title} img={bike.img} price={bike.price} addCart={this.addCart}/> 
        ) 
       }) 
      } 
     </div> 
    ) 
} 
+2

コンポーネントに 'addCart'をバインドするのを忘れてしまいました。 'this.addCart = this.addCart.bind(this)'をコンストラクタに追加してください。 – QoP

+0

'data.map'は、このコードのどこにでも変数' data'を宣言していないので意味がありません。それはグローバル変数ですか? – finalfreq

+0

データは、私のファイルの先頭にインポートされます( 'data.js'からデータをインポートします) –

答えて

-2

また、直接、状態オブジェクトを変異しようとしているのではなく、 const newCards = this.state.cards.push({title: title, qte: qte}); this.setState({ cards: newCards }); を使用する必要があります。

+0

^^これはpushを使用しているので、状態オブジェクトを直接変更します。代わりに新しい配列を返す 'concat'を使用してください。プッシュは配列の長さも返すので、あなたの例では 'newCards'は実際に配列の代わりに数字になります。 – finalfreq

+0

はい、そうです。私の悪い。 – Tom

0

あなたaddCart機能が

addCart(title, qte){ 
    console.log(title); 
    console.log(qte); 
    const array = this.state.cards.concat({title: title, qte: qte}) 
    this.setState({cards: array}) 
} 
ようにする必要がありPushメソッドは、状態を変異させるので、代わりの連結を使用します。新しい配列を返します。

関連する問題