javascript - 为 JSON 上的每个元素创建一个 React 组件

标签 javascript json reactjs firebase

我需要咨询为 JSON 中的每个元素(在本例中为 Firebase 数据库)呈现 React 组件。 我正在尝试创建一个书籍数据数组并将其推送到一个数组 bookKeysArray,然后我将使用它进行映射。

结果我收到错误消息,组件 ListOfUserBooks 未返回任何内容(bookComponent 未定义)。

有人有什么建议吗?

function ListOfUserBooks(props) {
    currentUserId = firebase.auth().currentUser.uid;
    userBooksDataRef = firebase.database().ref('booksData/').child(currentUserId);
    let bookKeysArray = [],
        bookComponent;

    userBooksDataRef.once('value')
            .then((snapshot) => {
                snapshot.forEach((childSnapshot) => {
                    bookKey = childSnapshot.key;
                    bookData = childSnapshot.val();
                    description = bookData.description;
                    ...

                    let bookDataArray = [description, ...];
                    bookKeysArray.push(bookDataArray);

                    bookComponent = bookKeysArray.map((book, index) => {
                            <ListOfUserBooks_ListView key = {index}
                                                       description = {book.description}
                                                       .../>
                        });
                    }
                });
            });
     return bookComponent;
};

Firebase 数据结构

enter image description here

最佳答案

.then 的执行是异步的。所以你实际上是在填充 bookComponent 之前返回它。在 React 开发中,诸如从 FireBase 检索数据的操作在生命周期 Hook 中执行以填充状态然后呈现它。您可以使用类组件轻松完成此操作:

class ListOfUserBooks extends React.Component {
  constructor(...args) {
    super(...args)
    this.state = { bookKeysArray: [] }
  }

  componentDidMount() {
    currentUserId = firebase.auth().currentUser.uid;
    userBooksDataRef = firebase.database().ref('booksData/').child(currentUserId);
    userBooksDataRef.once('value')
      .then((snapshot) => {
         bookKeysArray = []
         snapshot.forEach((childSnapshot) => {
           bookKey = childSnapshot.key;
           bookData = childSnapshot.val();
           description = bookData.description;
           ...
           bookKeysArray.push([description, ...]);
         })
         this.setState({ bookKeysArray })
  }

  render() {
    return this.state.bookKeysArray.map((book, index) => {
      return <ListOfUserBooks_ListView key = {index} .../>
    });
  }
}

关于javascript - 为 JSON 上的每个元素创建一个 React 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53965525/

相关文章:

javascript - 如何在元素移动时移除悬停状态

javascript - 为什么我的 Promise 没有同步运行?

javascript - 尝试对对象执行过滤方法

javascript - ReactJS toLowerCase 不是函数

javascript - 没有新的苹果设备就不可能开发一个强制触摸网络应用程序吗?

java - couchbase 中每个 java POJO 的文档模型是什么

javascript - 在数组中搜索 javascript

java - 在 JSP 中呈现 JSON 数据的最佳实践是什么?

javascript - 无法过滤数组以在 react 应用程序上获取电影

javascript - 用数组数据返回特定数量的 <td>