Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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
Arrays TypeError:this.state.PostsAtt.map不是函数-ReactJS_Arrays_Reactjs_Google Cloud Firestore - Fatal编程技术网

Arrays TypeError:this.state.PostsAtt.map不是函数-ReactJS

Arrays TypeError:this.state.PostsAtt.map不是函数-ReactJS,arrays,reactjs,google-cloud-firestore,Arrays,Reactjs,Google Cloud Firestore,我正在使用react infinite scroll组件包创建一个无限卷轴。我的滚动正在工作,但我在向滚动内容添加更多数据的更新数组中遇到问题 注意:set.setState({poststat:set.state.poststat.push({data:doc.data(),id:doc.id})}) 当我使用concat()时,我可以完全添加项目,但是我不能在这些文章中使用任何我试图返回的函数 我在社区里找了一些特别的东西,但没有找到任何帮助 constructor(props) {

我正在使用react infinite scroll组件包创建一个无限卷轴。我的滚动正在工作,但我在向滚动内容添加更多数据的更新数组中遇到问题

注意:set.setState({poststat:set.state.poststat.push({data:doc.data(),id:doc.id})})

当我使用concat()时,我可以完全添加项目,但是我不能在这些文章中使用任何我试图返回的函数

我在社区里找了一些特别的东西,但没有找到任何帮助

constructor(props) {
    super(props);  
    this.state = {
      PostsAtt: [],
    }
this.InfScroll = this.InfScroll.bind(this);
this.getDocs = this.getDocs.bind(this);
组件安装:

componentDidMount() {    
    // get firestore docs;
    this.getDocs();
  }
具有返回更多数据的infiniteScroll函数

InfScroll() {
    let db = firebase.firestore()
    let set = this;
    let lastVisible;

    var first = db.collection('newPost').orderBy("createdAt",'desc').limit(set.state.PostsAtt.length)        
    return first.get().then(function (documentSnapshots) {
    lastVisible = documentSnapshots.docs[documentSnapshots.docs.length - 1];   
      
    var next = db.collection('newPost').orderBy('createdAt','desc').startAfter(lastVisible).limit(3)
        next.get().then(documentSnapshots => {
        documentSnapshots.forEach( (doc) => {
          set.setState( { PostsAtt: set.state.PostsAtt.push({ data: doc.data(), id: doc.id }) } );                       
        });                      
      });                   
    })
  }
显示帖子功能

getDocs() {
    let db = firebase.firestore();
    let set = this;

    db.collection("newPost").orderBy('createdAt', 'desc').limit(3).onSnapshot( documentSnapshots => { 
      let PostsAtt = []           
      documentSnapshots.forEach( doc => {
        PostsAtt.push({ data: doc.data(), id: doc.id });  
      }); 
        set.setState({PostsAtt: PostsAtt});
    });    
  }
组件中显示帖子的映射

<InfiniteScroll
          dataLength={this.state.PostsAtt.length}
          next={ this.InfScroll }
          hasMore={true}
          loader={<h4 style={{textAlign: 'center'}}>Loading...</h4>}
          height={800}
          hasChildren={true}
          endMessage={
            <p style={{ textAlign: "center" }}>
              <b>Não há mais posts.</b>
            </p>
          } >
            
          <div>
              {this.state.PostsAtt.map( (data,index) => {   
                  return (               
                  <div className="viewPost-content">
                    {index}
                    <div className="viewPost-box" key={index}
                    width={{width: '600px'}} height={{height: '505px'}}
                    style={{
                      backgroundColor: data?.data?.colorBg,
                      backgroundImage: `url(${data?.data?.url_img})`,
                      color: 'White'               
                    }}
                    >            
                    <p> <Moment to={data?.data?.createdAt?.toDate().toString()} /> </p>            
                        <h2 className="text-post"> {data?.data?.texto} </h2>                                   
                        <div class="viewPost-icons">
                          <div style={{marginRight: '-5px', marginTop: '180px', 
                            backgroundColor:'transparent'}}>             
                            <Link to={`/Posts/${data?.id}`}>
                              <i class="fas fa-comment" 
                                style={{textShadow : ' 2px 1px 1px #000000',color: 'White'}}>                          
                              </i>
                            </Link>
                          </div>
                          <div style={{marginLeft: '-15px', marginTop: '180px',
                            textShadow : '2px 1px 1px #000000'}}> { 
                          data?.data?.comentarios.length}
                          </div>
                          <div style={{marginRight: '-5px', marginTop: '176px'}}>

                            <button id="bt-Posts" onClick={() => 
                            this.UplikeFunc(data?.id,data?.data?.likes)}  
                            value={this.state.corDoLike}                                                         
                                style={{'color' : 
      data.data?.likes?.includes(firebase.auth().currentUser?.displayName) ? 'green' : 'white'}}>                            
                              <i class="fas fa-thumbs-up" style={{textShadow : ' 2px 1px 1px 
                            #000000'}}></i>
                            </button> 

                          </div>  
                          <div style={{marginLeft: '-15px', marginTop: '180px',
                            textShadow : '2px 1px 1px #000000'}}> { data?.data?.likes?.length}
                          </div>

                          <div style={{marginRight: '-5px', marginTop: '176px'}}>
                            <button id="bt-Posts" onClick={() => 
                              this.UpdislikeFunc(data?.id,data.data?.dislikes)}
                              value={this.state.corDoDislike}
                              style={{color: data?.data?.DislikeColor}}
                              >                   
                              
                              <i class="fas fa-thumbs-down" style={{textShadow : '2px 1px 1px 
                              #000000'}}></i>
                            </button>
                          </div>

                          <div style={{marginLeft: '-15px', marginTop: '180px',
                            textShadow : '2px 1px 1px #000000'}}> { data?.data?.dislikes?.length}
                          </div>                                    
                        </div>
                    </div>                
                  </div>
                    )
                  })
                }
              </div>    
        </InfiniteScroll>

{this.state.poststat.map((数据,索引)=>{
报税表(
{index}

{data?.data?.texto} { 数据?.data?.comentarios.length} this.UplikeFunc(data?.id,data?.data?.likes)} 值={this.state.corDoLike} 样式={{'color': data.data?.likes?.includes(firebase.auth().currentUser?.displayName)?“绿色”:“白色”}> {data?.data?.likes?.length} this.UpdislikeFunc(data?.id,data.data?.dislikes)} 值={this.state.corDoDislike} style={{color:data?.data?.DislikeColor} > {data?.data?.dislikes?.length} ) }) }
我相信问题就在这里

set.setState( { PostsAtt: set.state.PostsAtt.push({ data: doc.data(), id: doc.id }) } );               
Array.push返回推送后数组中的项数。您应该将新数据推送到setState之外,或者使用spread运算符

const newPosts = [...set.sta.PostsAtt, { data: doc.data(), id: doc.id }]
set.setState({ PostsAtt: newPosts });

我相信问题就在这里

set.setState( { PostsAtt: set.state.PostsAtt.push({ data: doc.data(), id: doc.id }) } );               
Array.push返回推送后数组中的项数。您应该将新数据推送到setState之外,或者使用spread运算符

const newPosts = [...set.sta.PostsAtt, { data: doc.data(), id: doc.id }]
set.setState({ PostsAtt: newPosts });

使用
set.state.poststat.push
,您正在改变状态。此外,您还在for循环中设置状态

使用setState回调方法设置状态,并确保在for循环之后追加数据和更新状态

像这样

InfScroll=()=>{
设db=firebase.firestore();
设set=this;
让我们看得到;
var first=db
.收集(“新邮政”)
.orderBy(“createdAt”、“desc”)
.极限(设定状态后状态长度);
首先返回.get(),然后返回(函数(documentSnapshots){
lastVisible=documentSnapshots.docs[documentSnapshots.docs.length-1];
var next=db
.收集(“新邮政”)
.orderBy(“createdAt”、“desc”)
.startAfter(最后可见)
.限额(3);
next.get()。然后((documentSnapshots)=>{
常量postAttArr=[];//{
push({data:doc.data(),id:doc.id});
});

set.setState(prev=>({poststat:[…prev.poststat,…posttarr]}));//{/使用
set.state.poststat.push
,可以改变状态。还可以在for循环内设置状态

使用setState回调方法设置状态,并确保在for循环之后追加数据和更新状态

像这样

InfScroll=()=>{
设db=firebase.firestore();
设set=this;
让我们看得到;
var first=db
.收集(“新邮政”)
.orderBy(“createdAt”、“desc”)
.极限(设定状态后状态长度);
首先返回.get(),然后返回(函数(documentSnapshots){
lastVisible=documentSnapshots.docs[documentSnapshots.docs.length-1];
var next=db
.收集(“新邮政”)
.orderBy(“createdAt”、“desc”)
.startAfter(最后可见)
.限额(3);
next.get()。然后((documentSnapshots)=>{
常量postAttArr=[];//{
push({data:doc.data(),id:doc.id});
});

set.setState(prev=>({poststat:[…prev.poststat,…posttarr]}));//{////////,谢谢你,array.map的问题并不是一个函数,但是我仍然不能在这些返回的帖子中使用任何函数。InfScroll没有返回的帖子()函数工作得很好,我可以执行tanned函数。谢谢你,array.map的问题不是一个函数已经解决了,但是我仍然不能在这些返回的帖子中使用任何函数。InfScroll()没有返回的帖子函数工作正常,我可以执行tanned函数。感谢兄弟,infScroll()返回的帖子没有收到对我的同类函数的更新。但是,infScroll()未返回的帖子正常接收。感谢兄弟,infScroll()返回的帖子没有收到对my like函数的更新。但是infScro未返回的帖子