Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 手动更改数据库中的条目时,react native和firebase出错_Reactjs_Firebase_React Native_Firebase Realtime Database - Fatal编程技术网

Reactjs 手动更改数据库中的条目时,react native和firebase出错

Reactjs 手动更改数据库中的条目时,react native和firebase出错,reactjs,firebase,react-native,firebase-realtime-database,Reactjs,Firebase,React Native,Firebase Realtime Database,我正在从我的firebase数据库检索数据,该数据库工作正常,但当我手动更改数据库中的条目时,收到以下错误: Invariant Violation: Tried to get frame for out of range index NaN 方法拉取数据 listenForItems(itemsRef) { itemsRef.on('value', snapshot => { this.setState({ data: snapshot.val() }); console.l

我正在从我的firebase数据库检索数据,该数据库工作正常,但当我手动更改数据库中的条目时,收到以下错误:

Invariant Violation: Tried to get frame for out of range index NaN
方法拉取数据

listenForItems(itemsRef) {
 itemsRef.on('value', snapshot => {
  this.setState({ data: snapshot.val() });
  console.log(this.state.data);
    });
  }
控制台正确显示从firebase检索到的最新更新对象

渲染方法

  render() {
    return (
      <FlatList
        data={this.state.data}
        renderItem={({ item }) => (
          <ListItem
            title={item.title}
          />
        )}
        keyExtractor={(item, index) => index.toString()}
      />
      );
    }
render(){
返回(
(
)}
keyExtractor={(项,索引)=>index.toString()}
/>
);
}
DB中的项目以前是:

但是,当结构如下图所示时:

我收到了错误

注意:如果我将值更改回原来的值,错误将消失。有人能告诉我发生了什么事吗?

如本文所述:

Firebase本机不支持阵列。如果存储阵列,则 实际上,它被存储为一个“对象”,以整数作为键名

总之:

// when we send this
['hello', 'world']
// Firebase stores this
{0: 'hello', 1: 'world'}
路标
是一个对象数组。由于Firebase本机不支持数组,它所做的是创建一个以整数索引作为键名的对象,以便在使用时表现得像数组

因此,通过将
0
更改为
test1
,您试图将字符串(
test1
)设置为数组索引,它应该是一个数字,这就是为什么会出现
超出范围的索引NaN
错误。

如下所述:

Firebase本机不支持阵列。如果存储阵列,则 实际上,它被存储为一个“对象”,以整数作为键名

总之:

// when we send this
['hello', 'world']
// Firebase stores this
{0: 'hello', 1: 'world'}
路标
是一个对象数组。由于Firebase本机不支持数组,它所做的是创建一个以整数索引作为键名的对象,以便在使用时表现得像数组

因此,通过将
0
更改为
test1
,您试图将一个字符串(
test1
)设置为数组索引,它应该是一个数字,这就是为什么会出现
超出范围的索引NaN
错误