【问题标题】:Firestore function runs but does not always updateFirestore 功能运行但并不总是更新
【发布时间】:2024-04-28 04:35:02
【问题描述】:

我正在使用带有 Firestore 的 React-Native。我运行一个函数来更新 firestore 数据库,但它并不总是更新。有时我必须按两次按钮。

const markAsCompleted = async (id, isCompleted) => {
  console.log(id);
  await todoRef
    .doc(id)
    .update({
      isComplete: isCompleted,
    })
    .then(() => {
      console.log("mark As Completed Updated!");
    });
};

render(){
    return(
      <View>
          <Button onPress={()=> this.markAsCompleted('123', true)}
      </View>
    )
  }

【问题讨论】:

    标签: react-native google-cloud-firestore


    【解决方案1】:

    您的 React 组件按钮缺少结束标记,并且函数调用 markAsCompleted 不合适,因为它有一些 es6 语法错误。

    我已经对您的代码进行了一些更改,看看是否可行。

    import React,{Component} from “react”;
    import {Button} from “ native-base”;
    import {View} from “react-native”;
    import firestore from “@react-native-firebase/firestore”;
    
    export default class App extends Component{
    
    async markAsCompleted =  (id, isCompleted) => { 
    console.log(id); 
    await firestore.collection(“collectionName”)
    .doc(id)
     .update({ isComplete: isCompleted, })
     .then(() => { 
    console.log("mark As Completed Updated!"); 
    });
     }; 
    render(){ 
    return( 
    <View>
     <Button onPress={()=> {this.markAsCompleted('123', true)} }>
    </Button>
    </View>
     ) }
    }
    
    • 还要确保您已将 Firestore 规则设置为接受更新事务。

    • 使用此公开文档获取: Real time updates in Firestore collections.

    • 您可以使用 onSnapshot() 方法收听文档。使用您提供的回调的初始调用会立即使用单个文档的当前内容创建文档快照。然后,每次内容更改时,另一个调用会更新文档快照。

    • 在函数调用中添加回调侦听器可以帮助您获得成功或错误响应。

    【讨论】: