平面列表没有';t显示来自firebase的数据

平面列表没有';t显示来自firebase的数据,firebase,react-native,firebase-realtime-database,react-native-flatlist,react-native-firebase,Firebase,React Native,Firebase Realtime Database,React Native Flatlist,React Native Firebase,我试图在平面列表中显示一个项目,但它不显示任何内容。即使是平面列表之外的项目也不会显示。我通常不使用类组件,所以可能我遗漏了什么 静态导航选项=({navigation})=>{ 返回{ scannedkey:navigation.getParam(“itemId”,null) } } 建造师(道具){ 超级(道具); this.state={ 产品列表:[], } } 异步组件安装(scannedkey){ 上的firebase.database().ref(`product/${scanne

我试图在平面列表中显示一个项目,但它不显示任何内容。即使是平面列表之外的项目也不会显示。我通常不使用类组件,所以可能我遗漏了什么

静态导航选项=({navigation})=>{
返回{
scannedkey:navigation.getParam(“itemId”,null)
}
}
建造师(道具){
超级(道具);
this.state={
产品列表:[],
} }
异步组件安装(scannedkey){
上的firebase.database().ref(`product/${scannedkey}`)(
“价值”,
(快照)=>{
var列表=[];
snapshot.forEach((子项)=>{
list.push({
key:child.key,
标题:child.title,
//详细信息:child.val().details,
//price:child.val().price
});
});
this.setState({productlist:list});
},
(错误)=>控制台错误(错误)
);
}
组件将卸载(){
if(this.valuelistener){
this.valueRef\uu0.off(“值”,this.valuelistener\u0)
}}
render(){
console.log(this.state.productlist)
返回(
嘿
{this.state.productlist.title}
);}}
这就是我得到的错误:

Setting a timer for a long period of time, i.e. multiple minutes, is a performance and correctness issue on Android as it keeps the timer module awake, and timers can only be called when the app is in the foreground. See https://github.com/facebook/react-native/issues/12981 for more info.
(Saw setTimeout with duration 392608ms)
at node_modules\react-native\Libraries\LogBox\LogBox.js:117:10 in registerWarning
at node_modules\react-native\Libraries\LogBox\LogBox.js:63:8 in warnImpl
at node_modules\react-native\Libraries\LogBox\LogBox.js:36:4 in console.warn
at node_modules\expo\build\environment\react-native-logs.fx.js:18:4 in warn
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:226:6 in setTimeout
at node_modules\@firebase\database\dist\index.esm.js:99:8 in MemoryStorage
如果您能帮我找到解决方法,我将不胜感激。

在您的
on('value')
处理程序中,您有一个输入错误:

this.setState({produclist:list});
应该是

this.setState({productlist:list});
该方法还接受一个错误处理回调,您应该将其附加到该回调,以便获得有关任何数据库错误的信息:

.on(
“价值”,
(快照)=>{
var列表=[];
snapshot.forEach((子项)=>{
const childData=child.val();
list.push({
key:child.key,
标题:childData.title,
//详细信息:childData.details,
//价格:childData.price
});
});
this.setState({productlist:list});
},
(错误)=>控制台错误(错误)
);
还有一件事,该方法返回一个回调,您应该在
componentWillUnmount
中使用该回调,以便正确销毁元素:

componentDidMount(scannedkey){
this.valueRef=firebase
.数据库()
.ref(`product/${scannedkey}`);
this.valuelistener=this.valueRef_
.on(“值”,…)
}
组件将卸载(){
if(this.valuelistener){
this.valueRef\uu0.off(“值”,this.valuelistener\u0)
}
}
在('value')处理程序的
中,您有一个输入错误:

this.setState({produclist:list});
应该是

this.setState({productlist:list});
该方法还接受一个错误处理回调,您应该将其附加到该回调,以便获得有关任何数据库错误的信息:

.on(
“价值”,
(快照)=>{
var列表=[];
snapshot.forEach((子项)=>{
const childData=child.val();
list.push({
key:child.key,
标题:childData.title,
//详细信息:childData.details,
//价格:childData.price
});
});
this.setState({productlist:list});
},
(错误)=>控制台错误(错误)
);
还有一件事,该方法返回一个回调,您应该在
componentWillUnmount
中使用该回调,以便正确销毁元素:

componentDidMount(scannedkey){
this.valueRef=firebase
.数据库()
.ref(`product/${scannedkey}`);
this.valuelistener=this.valueRef_
.on(“值”,…)
}
组件将卸载(){
if(this.valuelistener){
this.valueRef\uu0.off(“值”,this.valuelistener\u0)
}
}

Typo。您正在设置
produclist
而不是
productlist
@jnpdx修复了输入错误仍然不起作用我还添加了从控制台log.typo获得的内容。您正在设置
produclist
而不是
produclist
@jnpdx修复了输入错误仍然不起作用的问题,我还添加了从控制台日志中获得的内容。谢谢您添加了所要求的内容,但仍然没有显示。我想可能是我的平面列表。@maybwheather您还没有将错误处理程序附加到('value')上的
(如本答案所示),这可能会说明您的问题所在。很抱歉,我更新了代码,并发布了一条收到的消息。@可能是因为
产品列表的打字错误再次出现。谢谢您再次指出。现在它没有显示错误,但它仍然显示数组为空,并给我一条警告消息。感谢您添加了所要求的内容,但它仍然没有显示。我想可能是我的平面列表。@maybwheather您仍然没有将错误处理程序附加到('value')
(如此答案所示),这可能会说明您的问题所在。很抱歉,我更新了代码并发布了我收到的一条消息。@maywhere
productlist
的打字错误又出现了。谢谢您再次指出。现在它不显示错误,但它仍然显示数组为空,并向我发出警告消息。