遍历 React/Jsx 中的对象列表

Traversing Through List of Objects in React/Jsx

我在尝试遍历 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 向我发送了看起来像这样的数据,它不是一个对象列表,而是一个对象的对象:

有没有一种方法可以对这些数据做类似的事情并获得 id (-KbMAsG9X...?)

更新--- 我尝试了这种替代方法

  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>
        );
    }
}

我可以迭代,但我仍然无法访问 resolved 或 timeIn 等对象的值。我得到的错误是:

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

问题是 timeIn(在 return _.map(this.props.bookList, (timeIn) => { ... }) 中)实际上是您的 "book" 对象。

所以,当反应说:

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

这是说它不知道如何呈现您的 "book" 对象。您正在尝试使用 {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>
        )
    });
}

希望对您有所帮助!