2017-01-26 5 views
0

JSX内のオブジェクトのリストをトラバースしようとしています。私は、オブジェクトのリストを持っている場合React/Jsx内のオブジェクトのリストをトラバースする

renderBooks(book) { 
    return(
     <div> A new book </div> 
     {book.id}, {book.timeIn} 
    ); 
    } 


    render() { 
     console.log("the values are", this.props.bookList);  
     return (
      <div > 
       <h1> The Books </h1> 
        {this.props.bookList.map(this.renderBooks.bind(this))} 
      </div> 
     ); 
    } 
} 

上記のコードは動作しますが、FireBaseは私にオブジェクトのリストが、オブジェクトの対象ではありません。このように見えるデータを送信した:

enter image description hereがあります私は、このデータと類似した何かを行うだけでなく、IDを(-KbMAsG9X ...?)を得ることができる方法は

UPDATEは--- 私は、この別の方法を試してみました

renderBooks() { 
    return _.map(this.props.bookList, (timeIn) => { 
     return(  
     <li className="list-group-item"> 
      {timeIn} 
      <button 
       className="btn btn-danger right"> 

       Book Exists 
      </button> 
      </li> 
     ); 
    }); 
    } 

    render() { 
     return (
      <div > 
       <h1> The Books </h1> 
       {this.renderBooks()} 
      </div> 
     ); 
    } 
} 

私は反復することができますが、解決済みやtimeInのようなオブジェクトの値にはまだアクセスできません。私が手にエラーがある:

Error: Objects are not valid as a React child (found: object with keys {address, resolved, timeIn}) 

答えて

1

問題は(return _.map(this.props.bookList, (timeIn) => { ... })中)timeInが、実際には、あなたの「本」オブジェクトであるということです。

ので、反応すると言う:

Error: Objects are not valid as a React child (found: object with keys {address, resolved, timeIn})

それはあなたの「本」のオブジェクトをレンダリングする方法を知らないと言っています。 {timeIn}を使用してレンダリングしようとしています(この場合は、timeInというプロパティではなく、ブックオブジェクト全体です)。

ブックオブジェクトを正しく使用するだけで済みます。そのような何かに動作します:

renderBooks() { 
    return _.map(this.props.bookList, (book) => { 
     return (
      <li className="list-group-item"> 
       {book.id} - {book.timeIn} 
      </li> 
     ) 
    }); 
} 

あるいは、より多くのファッションの方法で、(あなたがオブジェクトな破壊を使用することができる場合):

renderBooks() { 
    return _.map(this.props.bookList, ({ id, timeIn }) => { 
     return (
      <li className="list-group-item"> 
       {id} - {timeIn} 
      </li> 
     ) 
    }); 
} 

はそれが役に立てば幸い!

+0

これは非常に感謝しています! 1つの質問は、オブジェクト名にアクセスできる方法ですか? "-KbMAsG9X" – lost9123193

+1

確かに! Lodashはそれを可能にします。 "map"に2番目のパラメータを使用できます。たとえば、 '_map({a:1、b:2}、(value、key)=> console.log(value、key));'は 'value'の中にオブジェクト値を持ち、オブジェクトキーあなたのケースでは、 "キーの中の" -KbMAsG9X ")。 –

+0

非常にきちんと、ありがとう! – lost9123193

関連する問題