试图获取超出范围索引 NaN 的框架(实时数据库)

Posted

技术标签:

【中文标题】试图获取超出范围索引 NaN 的框架(实时数据库)【英文标题】:Tried to get frame for out of range index NaN (realtime database) 【发布时间】:2018-07-21 23:58:18 【问题描述】:

我正在尝试从 firebase 数据库中渲染一些行,我收到了这个错误:

TaskQueue:任务错误:不变违规:试图获取帧 对于超出范围的索引 NaN

  const  currentUser  = firebase.auth();
    var userfavorites = firebase.database().ref(`/users/$currentUser.uid/favorites/`);
    userfavorites.once('value').then(snapshot => 
      this.setState( userfav: snapshot.val() )
    )

...

  <FlatList
    data=this.state.userfav
    renderItem=( item ) => (
      <Text>item.favdata</Text>
    )
  />

【问题讨论】:

【参考方案1】:

我遇到了这个错误,我有一个 php 后端并试图将 json_encoded 数据放入 FlatList。

问题: REST 端点正在返回一个对象,例如

"Total_Excavator":2,"Active_Excavator":2,"Total_load":6804

解决方案:修复它以返回一个数组而不是例如

["Total_Excavator":2,"Active_Excavator":2,"Total_load":6804]

注意方括号。 我用$data[] = json_encode($excavatorArray) 代替 $data = json_encode($excavatorArray) .希望有一天它对某人有所帮助

【讨论】:

解决了我的问题。我也将一个对象传递给一个平面列表。谢谢!【参考方案2】:

我有同样的问题,似乎这个问题是对象名称的原因。 在下图中,您可以看到,一旦您从 Firebase 端点获取快照,它就会带有 React Native 无法识别的 id。并且反应就像它是空的obj一样。

您所要做的就是在获取对象后映射对象的项目,如下例所示,

const fbObject = snap.val();
const newArr = [];
Object.keys(fbObject).map( (key,index)=>
    console.log(key);
    console.log("||");
    console.log(index);
    newArr.push(fbObject[key]);
);

【讨论】:

如果我没记错的话,你的代码和const newArr = Object.values(fbObject)一样。【参考方案3】:

只是对@mert 的答案稍作修改。 javascriptmap 操作符返回一个数组;因此,无需将 push 元素添加到 newArr 上。此外,新数组的元素将缺少独特的 Firebase id。所以,它应该被添加到数组元素中。

const fbObject = snapshot.val();
const newArr = Object.keys(fbObject).map((key) => 
  fbObject[key].id = key;
  return fbObject[key];
);

你最终会得到一个这样的 newArray:

[
  
    "id": "12345",
    "name": "Jane Doe",
    "age": 18
  ,
  
    "id": "23456",
    "name": "John Smith",
    "age": 27
  
]

【讨论】:

【参考方案4】:

我遇到了类似的问题,并将平面列表的数据保存在状态中。你必须确保状态中的数据是一个列表而不是一个对象:

this.state = 
    ...,
    data: [], // <-- wrap your flatlist's data in there

在更改数据/状态时,请始终使用回调函数在之后执行某些操作以保持 UI 同步:

this.setState(..., data, () =&gt; yourCallback())

【讨论】:

以上是关于试图获取超出范围索引 NaN 的框架(实时数据库)的主要内容,如果未能解决你的问题,请参考以下文章

Python中偶尔遇到的细节疑问:去除列名特殊字符标准差出现nan切片索引可超出范围range步长

NSRangeException - 超出范围的索引 (2008) (1)

在获取数据期间索引超出部分中的行数范围

获取“索引超出数组范围”异常

表视图错误致命错误:加载文件时索引超出范围

FMDB 和索引 0 超出空数组的范围