在 React Native 中添加新消息时,Firestore 侦听器从分页中删除消息

我正在尝试进行 Firestore 反应式分页。我知道有帖子、评论和文章说这是不可能的,但无论如何......

当我添加一条新消息时,它会启动或“删除”上一条消息

这是主要代码。我一次分页 4 条消息

async getpaginatedRTLData(queryParams: TQueryParams,onChange: Function){
  let collectionReference = collection(firestore,queryParams.pathToDataInCollection);
  let collectionReferenceQuery = this.modifyQueryByOperations(collectionReference,queryParams);

//Turn query into snapshot to track changes 
const unsubscribe = onsnapshot(collectionReferenceQuery,(snapshot: Querysnapshot) => {

  snapshot.docChanges().forEach((change: DocumentChange<DocumentData>) => {
    //Now save data to format later
    let formattedData = this.storeData(change,queryParams)
         
    onChange(formattedData);
  })
})

this.unsubscriptions.push(unsubscribe)
}

为了完整性,这就是我构建查询的方式

let queryParams: TQueryParams = {
  limitResultCount: 4,uniqueKey: '_id',pathToDataInCollection: messagePath,orderBy: {
    docField: orderByKey,direction: orderBy
  }
}    

  modifyQueryByOperations( 
collectionReference: CollectionReference<DocumentData> = this.collectionReference,queryParams: TQueryParams) {
//Extract query params
let { orderBy,where: where_param,limitResultCount = paginate} = queryParams;
let queryCall: Query<DocumentData> = collectionReference;

if(where_param) {
  let {searchByField,whereFilterOp,valueToMatch} = where_param;
  //collectionReferenceQuery = collectionReference.where(searchByField,valueToMatch)
  queryCall = query(queryCall,where(searchByField,valueToMatch) )
}

if(orderBy) {
  let { docField,direction} = orderBy;
  //collectionReferenceQuery = collectionReference.orderBy(docField,direction)
  queryCall = query(queryCall,fs_orderBy(docField,direction) )
}

if(limitResultCount) {
  //collectionReferenceQuery = collectionReference.limit(limitResultCount)
  queryCall = query(queryCall,limit(limitResultCount) );
}

if(this.lastDocInSortedOrder) {
  //collectionReferenceQuery = collectionReference.startAt(this.lastDocInSortedOrder)
  queryCall = query(queryCall,startAt(this.lastDocInSortedOrder) )
}

return queryCall
}

在 React Native 中添加新消息时,Firestore 侦听器从分页中删除消息

在 React Native 中添加新消息时,Firestore 侦听器从分页中删除消息

当我向集合中添加新消息时,看到最后一行已删除。更糟糕的是它并不一致。我对此进行了调试,Firestore 正在删除该消息。

在 React Native 中添加新消息时,Firestore 侦听器从分页中删除消息

我几乎觉得这是 Firestore 处理侦听器的错误

pes2011 回答:在 React Native 中添加新消息时,Firestore 侦听器从分页中删除消息

如评论中所述并由您确认,您面临的问题是由于您在查询中搜索的字段的某些值在侦听器仍处于活动状态时发生了更改,这使侦听器想到此文档已删除。

事实证明,记录并未从 Firestore 本身中删除,而只是从侦听器中排除。

这可以通过创建更好的查询结构来解决,将旧数据与从侦听器传入的新数据分开,您已经在评论中提到了这一点。

本文链接:https://www.f2er.com/2986.html

大家都在问