异步 useState 导致层次结构中未定义的元素

2024-02-10

设置/场景

我正在使用 twitter api 来获取数据并使用 twitter 卡将其呈现反应本机社交 https://github.com/PierreCapo/react-native-socials。 推文数据 ( JSON ) 通过我的后端存储和提供,并在应用程序中呈现。

我正在使用 Flatlist 来呈现此数据。

Problem

enter image description here It's working fine for the first 3 loads, I am using pullToRefresh in flatlist to do a network call to get new data.

但是当我第四次尝试时,它得到了undefined元素。

我已经更换了Twitter元素(来自react-native-socials lib)Text元素,那么就没有undefined在输出中并且它不会崩溃。

This undefined是什么导致元素在尝试从传递到的 json 数据中获取特定键的地方崩溃Twitter元素。

更重要的是,我尝试将其记录在链上,但徒劳无功。我必须走进图书馆并添加console.log就在对象被解构和分配的地方。

相关代码

  • 平面列表组件
<FlatList
      ref={refContainer}
      data={feed}
      keyExtractor={(post) => {
        return post.id.toString();
      }}
      ListHeaderComponent={ListHeaderComponent}
      renderItem={({ item }) => (
        <View
          style={{
            padding: 10,
            borderRadius: 35,
            backgroundColor: colors.white,
          }}
        >
          {item && item.type == postType.TWEET && (
            <Twitter useCustomTweetExtendedData={item.content} />
          )}
  • 来自库的代码:node_modules/react-native-socials/dist/src/Twitter/api.js它出错了data.created_at因此我添加了一个console.log
export var adapter = function (data) {
  console.log("typeof : "+ typeof(data) + " full_text : " + entities.decode(data?.full_text.slice(0, 10)));
  var _a, _b, _c, _d, _e, _f;
  var response = {
    createdAt: data.created_at,
    id: data.id,

我已经尝试过的事情:

  1. 提供默认值 - 是否仍然出现错误
  2. useEffect for feed- 第一次做不到loadFeed被调用来设置feed

我在此处询问之前提到的一些文章:

  1. 这讨论了相当多的策略 https://dmitripavlutin.com/react-usestate-hook-guide/

问题

  1. 为什么错误只发生在第三次网络调用中(是的,它是一致的)? - 有足够的数据来获取至少 10 次此类调用
  2. 为什么它没有登录到链上?
  3. 我已经做了这样的检查:{item && item.type == postType.TWEET && 但它怎么会下降到组件并产生错误呢?
  4. 我该如何解决这个问题

I read this - useState 设置方法未立即反映更改 https://stackoverflow.com/a/58877875但不明白如何用它来解决我的问题。

多谢。

Update

关于 reddit 上的建议我添加了一个零拒绝者 https://stackoverflow.com/a/281335/11857690之类的事情data.filter(obj => obj)但这似乎也没有帮助:/

我正在使用 flatlist 来渲染从后端服务器获取的完整对象数组。

我使用 Postman 检查了数据,一切正常,没有空值。

这是我的feed加载代码。

const loadFeed = async (typeOfFeed, old = false) => {
    setRefreshing(true);
    let url = "";
    if (old) {
        url = FeedCursor.next;
    }
    const response = await postsApi.getPosts(typeOfFeed, url);
    if (response.ok) {
      if (response.data[0].id == feed[0]?.id) {
        ToastAndroid.show("No new posts", ToastAndroid.SHORT);
      } else if (response.data.length > 0) {
          setFeedCursor({
            next: response.headers.next,
            previous: response.headers.previous,
          });
        }
        response.data.filter((obj) => obj);    // Updated this
        setFeed(response.data);
      }
    } else {
      ToastAndroid.show("No new posts", ToastAndroid.SHORT);
      console.error(response.problem);
    }
    setRefreshing(false);
  };

另一件事是,在发生这种情况之前,在之前的加载中它提到:

Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异步 useState 导致层次结构中未定义的元素 的相关文章

随机推荐

  • jmeter http请求的每个线程的唯一ID

    我的 jmeter 测试发出一个包含唯一 ID 的 http 请求 http myserver com uniqueId 我想为每个线程设置基数 比如 35000 和增量 例如我的 id 是 35001 35002 35003 http m
  • 类的指针与非指针成员

    我的问题是 假设我们有两个类 A 和 B 我想在 A 类中有一个 B 的对象 我应该使用 class A public A A B b or class A public A A B b 据我所知 在第一种情况下 我可以初始化对象 b us
  • C# - 带种子的随机数

    我有这个代码 var rand new Random 0 for int i 0 i lt 100 i Console WriteLine rand Next 0 100 程序应该给我相同数字的 100 倍 因为种子是相同的 但它给出了不同
  • 如何仅打印 hexdump 中的十六进制值而不显示行号或 ASCII 表? [复制]

    这个问题在这里已经有答案了 下列的在 UNIX shell 脚本中将十进制转换为十六进制 https stackoverflow com questions 378829 convert decimal to hexadecimal in
  • 串口通信初始化

    目前我们正在尝试创建一个串行通信接口 以便能够与微处理器进行通信 事实上 一切都很好 几乎 为了能够与我们的控制器通信 我们需要与其同步 为此 我们编写一个字符串 0 SY 13 然后控制器应该回复 0 SY F5 接受同步请求 为此 我们
  • 名称或类型具有某种语言链接意味着什么?

    根据 c ANSI ISO IEC 14882 2003 第 127 页 联动规格嵌套 当链接规范嵌套时 最里面的规范决定语言 链接规范不建立范围 链接规范仅应出现在名称空间范围内 3 3 在链接规范中 指定的语言链接适用于声明引入的所有函
  • 从 bash 执行 MySQL 查询时如何获取受影响的行数?

    我知道如何从 bash 执行 MySQL 查询 命令 mysql u user p pass e mysql commands or mysql u user p pass lt lt QUERY INPUT mysql commands
  • Prolog 中的自定义数据结构语法

    在序言中 H T 是开头的列表H以及剩余元素在列表中的位置T 内部表示为 H 是否可以以类似的方式定义新语法 例如 是否可以定义 T H 是以以下结尾的列表H以及剩余元素在列表中的位置T 然后像这样自由地使用它 H T 在谓词的头部和主体中
  • 如何在 jQuery UI Datepicker 中将 minDate 设置为当前日期?

    这是我的代码 它无法正常工作 我想设置minDate到当前日期 我该怎么做 input DateFrom datepicker changeMonth true changeYear true dateFormat yy mm dd max
  • Python:根据字典中的内容从列表中获取字典

    我需要能够在 a 中找到一个项目list 本例中的一个项目是dict 基于其中的某个值dict 的结构list我需要处理如下 title some value value 123 4 id an id title another title
  • MSTest 测试方法依赖注入

    我正在使用 DI 容器 并且想要使用从容器解析的实例进行 MSTest VS 2010 单元测试 我想将这些实例注入到我的 TestMethod 或至少是我的 TestClass 中 这可能吗 现在我的 TestMethods 直接调用co
  • 根据项目的特殊属性从列表中删除项目[重复]

    这个问题在这里已经有答案了 我有一个由我定义的项目组成的列表 每个项目都有一个属性 name t item1 item2 我想根据其属性从 t 列表中删除项目 name 如remove 或pop 方法 也许我可以做类似的事情 t remov
  • C# 从文件序列化数据契约

    我有一个 Xml 消息列表 特别是我记录到文件中的 DataContract 消息 我正在尝试将它们从文件中一一反序列化 我不想立即将整个文件读入内存 因为我预计它会很大 我有这个序列化的实现并且有效 我通过使用 FileStream 进行
  • ARCORE:通过单击此可渲染对象来删除特定的可渲染对象

    我正在开发一个使用 ARCore 的 Sceneform 的项目 我基于ARCore提供的HelloSceneform示例进行开发 我想要做的是通过点击添加一个可渲染对象 然后当我单击屏幕上的特定可渲染对象时将其删除 我已经尝试了方法 An
  • 在原生 Javascript 中查找具有类的元素的索引

    有没有办法获取类名的索引 即 类 className 的第三个元素将是 3 而不使用 jQ 我不了解jQ 而且我现在没有时间学习它 而且我不想在我的代码中包含至少一些我不理解的代码 Thanks 顺便说一句 我使用了 jQ 而不是拼写出来
  • 由 Scala 宏生成时,依赖类型似乎“不起作用”

    为这个挥手的标题道歉 我不完全确定如何简洁地表达这个问题 因为我以前从未遇到过这样的事情 背景资料 我有以下特征 其中类型U是为了举行无形可扩展记录 https github com milessabin shapeless wiki Fe
  • 我可以使用 memcpy 写入多个相邻的标准布局子对象吗?

    免责声明 这是试图深入研究一个更大的问题 所以请不要纠结于这个例子在实践中是否有意义 而且 是的 如果你想的话copy对象 请使用 提供复制构造函数 但请注意 即使该示例也不会复制整个对象 它会尝试将一些内存复制到一些相邻的 Q 2 整数上
  • 如何在 EF Code First 中对表进行单一化?

    在命名数据库表时 我更喜欢使用单数名词 然而 在 EF 代码优先中 生成的表始终是复数 我的 DbSet 是复数的 我相信这是 EF 生成名称的地方 但我不想将这些名称单数化 因为我相信在代码中使用复数名称更实用 我也尝试过覆盖该设置但无济
  • 如何在 JavaScript 中将数组的每个成员乘以标量?

    例如 我如何实现以下目标无需迭代数组 var a 1 2 3 5 a should equal 5 10 15 Array map https developer mozilla org en JavaScript Reference Gl
  • 异步 useState 导致层次结构中未定义的元素

    设置 场景 我正在使用 twitter api 来获取数据并使用 twitter 卡将其呈现反应本机社交 https github com PierreCapo react native socials 推文数据 JSON 通过我的后端存储