javascript - 为什么在使用上下文 API 从 MongoDB 获取数据时,ReactJS 中会记录一个空数组?

标签 javascript reactjs mongodb

我在我的 ReactJS 应用程序中使用上下文 API 从 MongoDB 获取数据。当我将数据记录到网页时,我得到了三个数组而不是一个。我不确定为什么会这样。

这是我的代码:

在 RoomProvider.js 文件中:

我已经使用 React.createContext 创建了一个上下文。 在 RoomProvider 的构造函数中,我已经用用户、房间、sortedRooms、featuredRooms 和 loading 初始化了状态。 我使用 axios 通过两种不同的方法从 MongoDB 获取数据——getRooms() 和 getUsers()。 我有一个返回特定房间的 getRoom() 方法。 在 componentDidMount() 中,我调用 getRooms() 并将加载设置为 false。 在 render() 方法中,我将 state 和 getRoom() 方法提供给上下文提供者。 在 RoomContainer.js 文件中:

我正在使用 withRoomConsumer() 高阶组件使用上下文。 我正在将房间数组记录到控制台。 当我运行该应用程序时,控制台显示一个空数组被记录了三次,而不是一个数组。我不确定为什么会这样。

有人可以帮我理解为什么我看到一个空数组被记录了三次吗?这是我的代码:

(包括 RoomProvider.js、RoomContainer.js 和任何其他相关文件的代码。)

最佳答案

它似乎按预期工作,您看到 3 个日志,因为该组件已渲染 3 次。

  1. 第一次呈现 - 没有数据,因为提取(在 componentDidMount) 还没有被触发。
  2. 第二次渲染 - 状态已更新(使用 loading: false)并获取 已触发,但调用尚未完成,因此仍然没有数据。
  3. 第三次渲染 - 返回的数据和更新的状态,现在你有 数据。

关于javascript - 为什么在使用上下文 API 从 MongoDB 获取数据时,ReactJS 中会记录一个空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58227432/

相关文章:

javascript - 什么提示确认表单重新提交?

javascript - ajax调用后仅在正确的选项卡中显示信息

javascript - 通用无状态组件 React 的类型?或者在 typescript 中扩展通用函数接口(interface)以获得更通用的功能?

Python 和 mongoDB 连接池(pymongo)

mongodb - 在 XML 数据库中实现 MongoDB 样式文档引用

javascript - 有没有办法在单击 "non react"dom 元素时调用组件方法

javascript - "obj != null"与 "! (obj == null)"?

javascript - Bootstrap 4 : Modal won't show on my react app

css - 使用情感库选择时如何更改文本颜色

node.js - NodeJS 管道损坏导致我的 Express api 停止工作