调用 DynamoDB 中的用户数据时渲染得太晚

2024-05-07

所以我试图从dynamoDB。我正在使用一个GraphQL API访问我的数据库。在提供的代码的注释部分中,我提到我已经尝试过users[1].friends.map,它确实返回正确的朋友列表数组,但用户似乎直到朋友列表渲染后才被设置。我应该如何设置我的代码,以便在第一次呈现页面时而不是在更新页面后呈现正确的朋友列表(在用户中找到)?

const FriendsList = [
 {
    name: 'Name 1',

  },
  {
    name: 'Name 2',

  },
  {
    name: 'Name 3',

  }, 
  {
    name: 'Name 4',

  },
  {
    name: 'Name 5',

  },
  {
    name: 'Name 6',

  },
  
];
const Friends = (props) => {

  const [refreshing, setRefreshing] = React.useState(false);
  const [users, setUsers] = React.useState([]);
  const [formData, setFormData] = React.useState(initialFormState);

  React.useEffect(() => {
    fetchUserData();
   }, []);

  async function fetchUserData() {
    const userData = await API.graphql({ query: listUsers });
    setUsers(userData.data.listUsers.items);
  }


  //console.log(users);
    const renderFriendsList = (props) => {

    /* 
     *Here I want to have something like...
     * return users[1].friends.map((item, i) => {
     * so I can iterate through the friends list 
     */
    return FriendsList.map ((item, i) => {
        return (
          <View style={{ paddingLeft: scale(10), paddingRight: scale(10) }}>
            <View
              style={{
                backgroundColor: '#d1cfcf',
                width: scale(330),
                height: scale(85),
                borderRadius: scale(10),
                flexDirection: 'row',
                borderColor: '#8f8a8a',
                borderBottomWidth: 1,
              }}>

              <View>
                <Text style={{ fontSize: 15 }}>{item.name}</Text>
              </View>
            </View>
          </View>
        );
    
    });
  };

    return (
      <View style={{}}>
          <View style={{ marginTop: scale(5) }}>
            {renderFriendsList()}
          </View>
      </View>
    );
  }

fetchUserData()应该设置users用户数据,但是当我打电话给用户时before第一次渲染时,用户仍然是未定义的。如果应用程序正在运行并且已从friendsList呈现好友列表,然后我将其更改为用户1 https://i.stack.imgur.com/dEWY6.png.friends 即时运行,它可以工作,但这显然是一个问题,因为它第一次无法正确渲染。我用React.useEffect()我想这会打电话给fetchUserData()当页面呈现时。

Here is the output I am getting when I console.log(users.result) Here is the output I am getting when I console.log(users.result)


useEffect使用空数组作为参数被调用after初始渲染,这是正常行为。

通常当你想要渲染与 api 调用相关的状态时,你会以如下形式存储:

const defaultState = { loading: false, result: null, error: null };
const [users, setUsers] = useState(defaultState); 

因此你可以这样做:

async function fetchUserData() {
    setUsers({ ...defaultState, loading: true });
    try {
        const userData = await API.graphql({ query: listUsers });
        setUsers({ ...defaultState, result: userData.data.listUsers.items});
    } catch (e) {
        setUsers({ ...defaultState, error: e.message });
    };
}

由于您正在进行远程调用,因此在加载期间显示旋转器是有意义的,而不是立即渲染集合。
因此您可以使用loading用于此目的的状态对象上的属性。

当然,还有其他技术,您可以立即在服务器上进行 ajax 调用,然后将它们作为 json 立即推送到客户端,或者只是从服务器渲染 html。

编辑: 基于当前的解决方案,您可以执行以下操作:

... 
return (
    <>
        { loading && <>loading...</> }
        {
            !loading
            && result 
            && <FriendList result={ result } /> // map now that the results are available 
        }
    </>
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用 DynamoDB 中的用户数据时渲染得太晚 的相关文章

  • Angular JS未知提供者错误

    删除 Bower components 并清理缓存后 我使用 Bower install 重新安装了依赖项 该应用程序无法加载并出现以下错误 未捕获的错误 injector unpr 未知提供程序 forceReflowProvider 这
  • 为什么只有 50 个实例在 AWS lambda 上运行?

    我在用context logStreamName识别 lambda 实例 并发设置为无保留 但日志显示只有 50 个实例正在运行 我是否误解了logStream pre logStream pre实例 我从那里得到的信息这个博客 https
  • 如何使用 file:///F:/foldername 访问 ajax 中的本地文件夹?但它适用于 http://

    在这里 我使用以下代码使用 AJAX jQuery 动态创建文件名列表 window load function var fileExt csv document ready function ajax url file F foldern
  • 动画和过渡的组合无法正常工作

    我一直在尝试添加一些基本的 CSS3 动画 目标是在按钮的单击事件上切换类 并根据添加的类对 div 进行动画处理 该代码对于 Firefox 中切换的第一次迭代完美运行 但对于 Chrome 等其他浏览器以及 Firefox 中的下一次迭
  • 为什么此 Firebase 可调用函数不返回值?

    我有一个应返回值的可调用函数 但唯一返回的是 null 以下是该功能的当前版本 我也尝试过回报第一个承诺 原来的once调用 最后在另一个then返回 GUID 在这种情况下它实际上返回了数据 但它立即返回并且 GUID 为空 我怎样才能实
  • 切换活动链接 Bootstrap 导航栏

    我读过很多关于这个主题的帖子 发现几乎总是相同的解决方案 但它对我不起作用 我的问题如下 我想使用 Twitter Bootstrap 2 3 2 及其导航栏 因此我包含了 css 和 js 文件 在此之前 我还包括 jquery 然后我举
  • JavaScript 语法是什么:{Ci, CC}? [复制]

    这个问题在这里已经有答案了 我正在做一些 FF 附加开发 我看到这样的语法 var Cc Ci require chrome 只是好奇这个语法是什么 以及它是否对 FF 开发或其他东西有特殊意义 这称为解构赋值 它的一个特点是JavaScr
  • 使用 JSONP 时出现“无效标签”?

    我的 JSONP 请求有问题 数据不会显示 Firebug 显示 无效标签 错误 我的 JavaScript ajax url link dataType jsonp beforeSend function xhr var base64 b
  • Opera Mobile 9.7 Beta 设置焦点 [重复]

    这个问题在这里已经有答案了 我们使用手持式扫描仪将物品移入和移出库存 扫描仪运行一个 ASP 页 该页提交表单以移动项目 我们最近购买了一台运行 Windows Mobile 6 1 的新扫描仪 很快就意识到 Mobile IE 完全没用
  • Ace Editor 自动完成和多种语言

    如何为 Ace 编辑器创建自动完成功能以及如何突出显示 php 中的 html javascript 和 csshttp ace ajax org http ace ajax org
  • 将 ngModel 绑定到自定义指令

    所以我已经在这个问题上工作了一个星期了 但我似乎无法理解整个指令的事情 我读了很多帖子 揭秘指令 http www toptal com angular js angular js demystifying directives 指令 ht
  • 如何在vuetify中设置固定工具栏?

    在 vuetify 中我使用工具栏
  • 谷歌地图的灰度

    有没有什么方法可以在不丢失任何其他功能的情况下以灰度显示 Google 地图 通过 Javascript API 嵌入 是的 他们在 api V3 中引入了StyledMaps http code google com apis maps
  • 我们如何关闭office React Fabric组件的错误消息栏?

    我正在尝试在应用程序中使用 Fabric React messageBar 组件 但即使我单击 messageBar 组件中的关闭图标 也无法关闭 关闭 消息部分 请找到以下代码以供参考 import React from react im
  • 电子节点集成不起作用,也普遍奇怪的电子行为[重复]

    这个问题在这里已经有答案了 我是 Electron 的新手 我一直在努力让它工作 我遇到了无法解释的行为 所以这里有一个总结 我无法让 Electron 和 html 之间的通信正常工作 即使我有nodeIntegration true 网
  • 带数字键的 Immutable.js 映射(包括性能测试)

    我在 React Native 应用程序中将 Immutable js 与 Redux 结合使用 元数据 例如查找表 是从服务器获取的 并作为 Immutable Map 保存在应用程序本地 查找值的键是整数 数据库中的主键 当我获取数据时
  • Nodejs 错误:libcouchbase.so.2:无法打开共享对象文件:没有这样的文件或目录

    我正在做一个nodejs项目 它在我的笔记本电脑上工作 但当我尝试在桌面上运行它时 它抛出错误 libcouchbase so 2 无法打开共享对象文件 没有这样的文件或目录 有人能建议我可能出了什么问题吗 提前致谢 也许它可以帮助某人 看
  • 为什么间接更改复选框时不会触发复选框上的 onchange

    我使用 Prototype 来监视复选框 因此我可以向它们添加 javascript 检查 当单击复选框所在的 tr 或 td 时 应选中该复选框 当您直接单击复选框时 会触发 onchange 事件 因此您会收到警报 当 javascri
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 使用 ASP.Net 和 Ajax 的登录页面

    我正在尝试使用 html ajax 和 ASP NET 制作登录页面 数据确实传递给 ajax 函数 但是当我调试 asp 页面时 用户名和密码以 NULL 发送 该代码应该获取用户名和密码 然后返回用户 ID html页面 div Use

随机推荐

  • 错误:从上游读取响应标头时上游过早关闭连接 [uWSGI/Django/NGINX]

    我目前在用户正在进行的查询中总是得到 502 它通常返回 872 行 在 MySQL 中运行需要 2 07 然而 它返回了大量信息 每一行包含很多东西 有任何想法吗 运行 Django tastypie Rest API Nginx 和 u
  • 如何将列表从控制器发送到百里香

    我需要将列表中存在的数据从我的 spring 控制器发送到 thymeleaf html 我如何发送数据 收到后如何迭代百里香中的数据 将您的清单放入您的ModelMap or ModelAndView对象然后使用遍历它th each在你的
  • 检查目录是否为空

    我正在尝试检查目录是否为空 MainWindow MainWindow QWidget parent QMainWindow parent ui new Ui MainWindow ui gt setupUi this QDir Dir h
  • jQuery触发新添加的html代码

    示例我有 2 个 html 输入 div class wrap div
  • git push heroku master 通过代理后面的 ssh 出现错误

    简要背景 大家好 我是一名大学生 代理 10 3 100 211 8080 刚接触 ROR Git 和 Heroku 一直在关注 Ruby on Rails 教程 我解决了通过 ssh 推送 git repo 的问题 在我的 ssh con
  • 如何在 Perl 中取消导入函数?

    我正在尝试删除导入的符号 以便它们不能用作对象中的方法 但是no似乎不起作用 也许我不明白不 或者还有其他方法 use 5 014 use warnings use Test More still has carp after no car
  • 执行命令不会在后面的资源字典代码中触发

    我已经为其创建了资源字典和代码隐藏文件 在 XAML 中 我定义了命令绑定并添加了执行处理程序
  • Android 按文件夹列出音乐并播放

    我正在开发已经上市的安卓音乐播放器 用户要求添加一个文件夹视图来列出智能手机中包含音乐的所有文件夹 我想开发它 MediaStore 已经知道要遵循的正确路径 因为它需要知道它们每次重新扫描 SD 卡 所以我想知道是否有办法获取这些路径并使
  • Stripe Connect - 检索访问令牌

    我正在尝试为 Rails 3 2 13 应用程序设置 Stripe Connect 我已将用户引导至 Stripe 并收到了来自 Stripe 的授权码 HTTP 1 1 302 Found Location http localhost
  • 如何在 PHP 中解密密码哈希?

    我需要解密密码 密码已加密password hash功能 password examplepassword crypted password hash password PASSWORD DEFAULT 现在 我们假设 crypted存储在
  • Opencv未找到所有轮廓

    我试图找到该图像的轮廓 但是该方法查找轮廓只返回1轮廓 轮廓突出显示image 2 我正在努力寻找all外部轮廓就像这些圆圈 里面有数字 我究竟做错了什么 我可以做什么来实现它 image 1 image 2 以下是我的代码的相关部分 th
  • MSBuild - 我可以编译子目录中的所有解决方案吗?

    MSBuild 中有没有一种方法可以编译指定父级下的文件夹 子文件夹和子 中的所有解决方案 我们的库附带了很多示例程序 我想添加到构建过程中 我们知道它们都会编译 您可以创建自己的targets for restore and build运
  • 从命令提示符启动mysql服务器时出错

    我是 sql 新手 我安装了 mysql 并且正在阅读这本书 Java 如何编程连接到 mysql 我收到以下错误 关于时间戳 我明白原因 但我正在尝试修复 无法创建测试文件 C Program Files MySQL MySQL Serv
  • 如何在 Dart 中传递常见参数?

    说吧 我有 callback orderBy foo reverse true localToThis callback orderBy foo reverse true 您可以在两个回调中看到 我传递了相同的参数 foo reverse
  • 如何为 Safari 浏览器设置媒体查询

    media only screen and min width 480px and max width 767px 这是我的媒体查询如何修复它 如何设置 safari 网络浏览器 媒体查询不是为了浏览器检测而进行的 使用 javascrip
  • 有没有办法确定特定地址是否位于 x 英里内的路线沿线?

    有没有办法确定特定地址是否位于 x 英里内的路线沿线 Google 地图 API 是否支持此功能 我有一个地址数据库 我试图找出 Google 地图 API 确定的给定路线上的哪些位置 您可以设置获取折线 http code google
  • 将文本文件中的多行组合/合并为一行 (Powershell)

    我有一个文本文件 其中包含如下内容 blah blah blah Text string1 string2 string3 string4 string5 string6 blah blah blah Text string7 string
  • Spring MVC 3 中的表单提交 - 说明

    我在理解 Spring 3 MVC 中的表单提交如何工作时遇到问题 我想做的是创建一个控制器 它将获取用户的名字并将其显示给他 不知怎的 我已经做到了 但我不太明白它是如何工作的 所以 我有一个看起来像这样的表格
  • RavenDb 和多租户

    我已经研究并使用了 RavenDb 一段时间 并开始考虑 MultiTenancy 多租户 Ayendes 示例如下所示 using var store new DocumentStore Url http localhost 8080 I
  • 调用 DynamoDB 中的用户数据时渲染得太晚

    所以我试图从dynamoDB 我正在使用一个GraphQL API访问我的数据库 在提供的代码的注释部分中 我提到我已经尝试过users 1 friends map 它确实返回正确的朋友列表数组 但用户似乎直到朋友列表渲染后才被设置 我应该