当前位置: 首页 > 知识库问答 >
问题:

Flatlist React-Native组件防止我的数组填充导致应用程序崩溃

黄信厚
2023-03-14

我正试图从后端在屏幕上加载几个项目:

async function loadIncidents() {
    try {
      const response = await api.get("incidents");
      const theData = response.data;
      console.log(theData);
      setIncidents(theData);
      console.log(incidents);
    } catch (e) {
      console.error(e.message);
    }
  }

  useEffect(() => {
    loadIncidents();
  }, []);

它确实有效,我可以在日志中看到我的数据,但只有当负责呈现每个项的Flatlist没有注释时,它才不会填充我的数组,并向我显示一个错误:

传播不可迭代实例的尝试无效。为了能够迭代,非数组对象必须具有Symbol.Iterator方法。-node_modules@babel\runtime\helpers\noniterablespread.js:2:22 in_noniterablespread-node_modules@babel\runtime\helpers\toconsumablearray.js:10:111 in_toconsumablearray:10:111 in_toconsumablearray*src\pages\incents\index.js:54:6 in incents-node_modules\react-nativels\libraries\renderer\implements\react实现\reactNativerEnderer-dev.js:307:15 invokeGuardedCallbackImpl-Node_Modules\react-Nativer\Librares\renderer\implementations:531:36 invokeGuardEdCallback-Nodules\React-NativerEnderer-dev.js:531:36 invokeGuardCallback-Nodules\React-Nativer\Librares\Render\ReactNativerEnderer-Dev.js:20488:8ntations\reactnativeRenderer-dev.js:19347:39 in workloopsync-node_modules\react-nativeRenderer-dev.js:18997:22 in renderRoot*[本机代码]:null in renderroot-node_modules\react-nativeRenderer-dev.js:18709:28 in runRootCallback*[本机代码]:null in runrootcallback-node_modules\react-nativeRenderer-dev.js:null in\cjs\scheduler.development.js:643:23 in unstable_runWithPriority-node_modules\react-nativel\libraries\renderer\implementations\reactnativerrenderer-dev.js:5638:22 in flushsynccallbackqueueimpl-node_modules\react-nativerrender-dev.js:5627:28 in flushsynccallbackqueueimpl-node_modules\reactnderer\implementations\reactnativerEnderer-dev.js:11484:17 in dispatchAction*[本机代码]:null in dispatchAction*src\pages\incents\index.js:29:18 in loadements-node_modules\regenerator-runtime\runtime.js:45:44 in trycatch-nodules\regenerator-runtime\runtime.js:274:30 in ve.then$argument_0-node_modules\promise\setimmediate\core.js:37:14 in trycallone-node_modules\promise\setimmediate\corement\core.js:123:25 in setimmediate$argument_0
-node_module\react-native\librares\core\timers\js:146:14 in_calltimer-node_module\react-node_module\react-模块\react-native\库\batchedbridge\messagequee.js:407:6 in__callimmediates-node_modules\react-native\libraries\batchedbridge\messagequee.js:143:6 in__guard$argument_0-node_modules\react-native\libraries\batchedbridge\messagequee.js:384:10 in__guard

警告:%s:错误边界应实现getDerivedStateFromError()。在该方法中,返回一个状态更新以显示错误消息或回退UI。rooterrorbounder-node_modules\react-native\libraries\yellowbox\yellowbox.js:63:8 In console.error-node_modules\expo\build\environment\mutewarnings.fx.js:27:24 In error-node_modules\react-native\libraries\renderer\react-nativer\implementations:645:36 In warningWithoutStack.js:7595:16 In callCallback-node_modules\react-native\libraries\renderer\implementations\react-native\libraries\reactnativeRenderer-dev.js:7639:19 In commitupdateEffects-node_modules\react-native\libraries\reactnativeRenderer-dev.js:7630:22 Innderer\implementations\reactnativerEnderer-dev.js:20002:23 in commitlayouteffects-node_modules\react-nativer\libraries\renderer\implements\reactnativerEnderer-dev.js:307:15 in invokeGuardedCallbackimpl-node_modules\react-nativer\libraries\render\implements:531:36 in er.development.js:643:23 in unstable_runWithPriority-node_modules\react-native\libraries\renderer\implementations\reactnativeRenderer-dev.js:19590:4 in commitRoot*[本机代码]:null in commitRoot-node_modules\react-nativeRenderer-dev.js:18709:28 in runRootCallback*[本机代码]:null in runRootCallbackUment_1-node_modules\scheduler\cjs\scheduler.development.js:643:23 in unstable_runWithPriority-node_modules\react-native\libraries\renderer\implements\reactnativerrenderer-dev.js:5638:22 in flushsynccallbackqueueimpl-node_modules\react-nativerrenderer-dev.js:5627:28 in Er\implementations\reactnativerEnderer-dev.js:11484:17 in dispatchAction*[本机代码]:null in dispatchAction*src\pages\invents\index.js:29:18 in loadements-node_modules\regenerator-runtime\runtime.js:45:44 in trycatch-nodules\regenerater-runtime\runtime.js:274:30 inimpl.resolve.then$argument_0-node_modules\promise\setimmediate\core.js:37:14 in trycallone-node_modules\promise\setimmediate\corement_0
-node_modules\react-native\librares\core\timers\js:143:25 in setimmediate\argument_0
-node_modules\react-native\librares\core\timers\js:146:14 in node_modules\react-native\libraries\batchedbridge\messagequee.js:407:6 in__callImmediates-node_modules\react-native\libraries\batchedbridge\messagequee.js:143:6 in__guard$argument_0-node_module\react-native\libraries\batchedbridge\messagequee.js:384:10 in__guard r-node_modules\react-nativeLibraries\batchedbridge\messagequee.js:407:6 in__callimmediates-node_modules\react-nativels\libraries\batchedbridge\messagequee.js:143:6 in__guard$argument_0-node_modules\react-nativels\libraries\batchedbridge\messagequee.js:384:10 in__guard

看起来Flatlist阻止我的函数loadEvents()填充我的数组,当Flatlist存在并调用我的变量数组返回空时。我尝试了几种方法来调试它,但都不起作用。这是单子,没有什么特别的:

<FlatList
     data={incidents}
     style={styles.incidentList}
     keyExtractor={(incident) => String(incident.id)}
     showsVerticalScrollIndicator={false}
     renderItem={({ item: incident }) => (
       <View style={styles.incident}>
         <Text style={styles.incidentProperty}>NGO:</Text>
         <Text style={styles.incidentValue}>{incident.name}</Text>
       </View>
     )}
 />

共有1个答案

燕宜修
2023-03-14

你能发送整个组件的代码和事件数据的结构吗?消息称您试图传播一个不可迭代的实例。可能是您得到了一个未解析的json对象?如果是这样,请尝试使用json.parse将json字符串转换为js结构

 类似资料:
  • 即使在谷歌搜索了几个小时后,我也无法找出确切的问题。我已经检查了StackOverflow本身的几个答案,但未能找出问题所在。 错误跟踪如下: 主要活动代码: 更新1:我已经做了答案中建议的所有更改,但每当我单击MainActivity中的“跳过指令”按钮时,我的应用程序仍然崩溃。此外,当我从AdminLogin活动中单击“登录”按钮时,应用程序崩溃。我该怎么办? Update2:我提到了什么是N

  • 这里是Android开发者新手。我在MainActivity中使用recyclerview,应用程序不断崩溃。 任何帮助都将受到赞赏! 编辑:对不起,我是新来的。我已经附加了Logcat。和其他xml文件。谢谢 这是我的代码: 列出你的布局。xml: activity_main.xml: } ProductAdapter。java类: } Logcat: 致命异常:主进程:e.wolverine2

  • 我让我的学长给我解释,他说, 这是为了防止生产中的崩溃。 我完全不同意。对我来说,这不是防止应用程序崩溃的方法。这表明开发人员不知道他/她在做什么,并有疑问。 由于这个问题得到了很多关注,有些人误解了这个问题(可能是因为我没有清楚地表达它),我打算重新表达它。 以下是开发人员在这里所做的 > 编写并测试一个函数,它可以是一个只是初始化视图的小函数,也可以是一个复杂的函数,测试后它被包裹在块中。即使

  • 我正在使用内置于Web View的Android开发浏览器。其中我面临的一个问题是,当我访问http://crashmybrowser.com测试浏览器上的选项卡崩溃时,我的整个浏览器应用程序都会崩溃。但是,当在chrome或Opera上进行相同的测试时,这些浏览器会在崩溃中幸存下来,并且只有特定的选项卡崩溃是由于访问上述网站而预期的结果。有人能帮助理解我如何在使用Webview的浏览器上处理此崩

  • 我必须用奇数的范围(这里是)填充数组:1,3,5,7,9...但我总是在每个奇数之间有一个0,我不明白为什么。 注:注释中大写字母下的代码是由我们的教授给出的... 输出:

  • 问题内容: 我正在开发一个Android 3.1应用程序,该应用程序使用USB主机模式通过USB上的MIDI与我的键盘(Korg M3)进行通信。这是在装有Android 4.0.3的Xoom上运行的。我可以通过USB接收MIDI消息而没有任何问题,但是将音符数据发送回键盘的效果是好坏参半,延迟半秒钟后便会频繁崩溃。 这是我在点击操作栏上的按钮发送注释时不断遇到的错误: E / dalvikvm(