gpt4 book ai didi

javascript - 无法从实时数据库 firebase 迭代子项?

转载 作者:行者123 更新时间:2023-11-30 06:14:24 24 4
gpt4 key购买 nike

我试图从我的数据库中获取一个嵌套的 child ,这是一个结构

DB

我想从 Gallery 对象中获取 URI当我登录时,我可以在控制台中看到这个

Console这是一个代码:

componentWillMount() {
const { gKey } = this.state;
firebase
.database()
.ref(`providers/${gKey}`)
.once("value")
.then(async snapshot => {
let aboutMe = snapshot.val().aboutMe;
let uri = snapshot.val().galary;
await this.setState({ aboutMe });
console.log(uri);
uri.forEach(childNodes => {
console.log(childNodes); // I Got Error here
});
});
}

我得到的错误

uri.forEach is not a function

更新

我在父“图库”中获取了所有 URI,并将其设置在一个数组中,并将其作为 Prop 传递到一个组件中,现在在该组件中并将其渲染为一个我只看到一个主题图像!!

父屏幕

Class Parent extend Component{
constructor(props){
super(props)
this.state={
...
images:[],
aboutMe:""
...
}


componentWillMount() {
const { gKey } = this.state;
firebase
.database()
.ref(`providers/${gKey}`)
.once("value")
.then(async snapshot => {
let aboutMe = snapshot.val().aboutMe;
let uri = snapshot.val().galary;
await this.setState({ aboutMe });
Object.values(uri).forEach(childNodes => {
let images = [];
images.push({
uri: childNodes.uri
});
this.setState({ images });
});
});
}

render(){
return(
<View>
....
<GalaryScreen images={this.state.images} />
....
</View>
)}
}

Galary

Galary.js

class GalaryScreen extends Component {
constructor(props) {
super(props);
}
render() {
return (
<View style={styles.container}>
<Text style={{ fontSize: 20, padding: 10, color: "#000" }}>Galary</Text>
<FlatList
horizontal
key={Math.floor(Math.random() * 1000)}
data={this.props.images}
renderItem={({ item }) => {
console.log(item.uri); // I can see every url here and all of them is a vaild URL
return (
<View style={{ margin: 10 }}>
<Image
key={Math.floor(Math.random() * 100)}
style={{ width: 100, height: 100 }}
source={{ uri: item.uri }}
/>
</View>
);
}}
keyExtractor={(item, index) => item.key}
/>
</View>
);
}
}

export default GalaryScreen;

控制台

Console

最佳答案

看起来问题出在这里:

Object.values(uri).forEach(childNodes => {
let images = [];
images.push({
uri: childNodes.uri
});
this.setState({ images });
});

let images = []; 位于您的 forEach 循环中,因此它在每次迭代中始终只保存 1 张图像。尝试在循环外声明图像数组,并在退出循环后声明 setState。你想做的更像是:

let images = [] 
Object.values(uri).forEach(childNodes => { images.push({ uri: childNodes.uri }); });
this.setState({ images });

关于javascript - 无法从实时数据库 firebase 迭代子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57078512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com