gpt4 book ai didi

javascript - react 组件中的状态不会呈现

转载 作者:行者123 更新时间:2023-12-01 00:32:06 26 4
gpt4 key购买 nike

我的 react 组件根本不会从状态加载数据。我的加载函数及其渲染按预期工作,但是,即使状态更新(我记录了它,它确实返回了预期的数据),也没有与它相关的渲染。如果帖子为空,则<p>nothing</>标签不显示,如果有数据,它不会打印在 p 标签中,也不会加载到我的轮播中。

import React, { Component } from 'react';
import { withFirebase } from '../Firebase';
import AliceCarousel from 'react-alice-carousel';
import 'react-alice-carousel/lib/alice-carousel.css';

import PostItem from '../Market/PostItem';

class LandingPosts extends Component {
constructor(props) {
super(props);

this.state = {
text: '',
loading: false,
posts: [],
limit: 5,
};

}

componentDidMount() {
this.onListenForMessages();
}

onListenForMessages = () => {
this.setState({ loading: true });

this.props.firebase
.collectionGroup('settings')
.where('homepagepost', '==', true)
.get().then(snapshot => {

let posts = [];

snapshot.forEach(doc => {

doc.ref.parent.parent.get().then(doc => {
posts.push({ ...doc.data(), uid: doc.id });
console.log(posts);
});

});

this.setState({ posts: posts.reverse(), loading: false });

});
};


responsive = {
0: { items: 1 },
1024: { items: 3 },
};

render() {
const { loading } = this.state;

return (
<div>
{loading && <div>Loading ...</div>}
{this.state.posts && (
<p>{this.state.posts[0]}</p>
)}
{!this.state.posts && (
<p>nothing</p>
)}
<AliceCarousel
items={this.state.posts.map(item => {return <PostItem data={item}/>})}
responsive={this.responsive}
autoPlayInterval={2000}
autoPlayDirection="rtl"
autoPlay={true}
fadeOutAnimation={true}
mouseDragEnabled={true}
disableAutoPlayOnAction={true}
buttonsDisabled={true}
/>
</div>
);
}
}

export default withFirebase(LandingPosts);

最佳答案

我认为,在您的情况下,以下代码是异步的。

doc.ref.parent.parent.get().then(doc => {
posts.push({ ...doc.data(), uid: doc.id });
console.log(posts);
});

如果是这样,请尝试在 then 中添加设置状态或创建这样的 Promise 数组。

posts.push(
doc.ref.parent.parent.get().then(doc => {
posts.push({ ...doc.data(), uid: doc.id });
console.log(posts);
});
)
Promise.all(posts).then((_posts)=>this.setState({ posts: _posts.reverse(), loading: false });)

关于javascript - react 组件中的状态不会呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58445905/

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