Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Javascript Firebase:尝试删除文档并返回上一屏幕时出现问题_Javascript_Firebase_React Native_Google Cloud Firestore - Fatal编程技术网

Javascript Firebase:尝试删除文档并返回上一屏幕时出现问题

Javascript Firebase:尝试删除文档并返回上一屏幕时出现问题,javascript,firebase,react-native,google-cloud-firestore,Javascript,Firebase,React Native,Google Cloud Firestore,我正在想办法解决这个问题 查看文档时,我想删除它,然后使用StackActions.pop(1)返回上一屏幕 我的州是这样建立的: const [loading, setLoading] = useState(true); const [sensorData, setSensorData] = useState(); const currentFarmId = useSelector((state) => state.session.currentFarm.farmId);

我正在想办法解决这个问题

查看文档时,我想删除它,然后使用
StackActions.pop(1)
返回上一屏幕

我的州是这样建立的:

  const [loading, setLoading] = useState(true);
  const [sensorData, setSensorData] = useState();

  const currentFarmId = useSelector((state) => state.session.currentFarm.farmId);
  const currentSensorId = useSelector((state) => state.session.currentSensor.sensorId);

  useEffect(() => {

    return db
      .collection('farms')
      .doc(currentFarmId)
      .collection('sensors')
      .doc(currentSensorId)
      .onSnapshot((documentSnapshot) => {
        const data = documentSnapshot.data();
        setSensorData(data);
        setLoading(false);
      });

  }, [currentFarmId, currentSensorId]);s
  if (loading) {
    return <LoadingIndicator />;
  }

  // Render
  return (
    <View>
      <Text>{sensorData.sensorType}</Text>
    </View>
我将数据加载到传感器数据中,如下所示:

  const [loading, setLoading] = useState(true);
  const [sensorData, setSensorData] = useState();

  const currentFarmId = useSelector((state) => state.session.currentFarm.farmId);
  const currentSensorId = useSelector((state) => state.session.currentSensor.sensorId);

  useEffect(() => {

    return db
      .collection('farms')
      .doc(currentFarmId)
      .collection('sensors')
      .doc(currentSensorId)
      .onSnapshot((documentSnapshot) => {
        const data = documentSnapshot.data();
        setSensorData(data);
        setLoading(false);
      });

  }, [currentFarmId, currentSensorId]);s
  if (loading) {
    return <LoadingIndicator />;
  }

  // Render
  return (
    <View>
      <Text>{sensorData.sensorType}</Text>
    </View>
这是我的删除代码:

  function onDeleteSensorHandler() {
    deleteSensor()
      .then(() => {
        const afterDeleteNavigateAction = StackActions.pop(1);
        props.navigation.dispatch(afterDeleteNavigateAction);
      });
  }

  async function deleteSensor() {

    setLoading(true);

    await db
      .collection('farms')
      .doc(currentFarmId)
      .collection('sensors')
      .doc(currentSensorId)
      .delete();

    setLoading(false);

  }
我把屏幕渲染成这样:

  const [loading, setLoading] = useState(true);
  const [sensorData, setSensorData] = useState();

  const currentFarmId = useSelector((state) => state.session.currentFarm.farmId);
  const currentSensorId = useSelector((state) => state.session.currentSensor.sensorId);

  useEffect(() => {

    return db
      .collection('farms')
      .doc(currentFarmId)
      .collection('sensors')
      .doc(currentSensorId)
      .onSnapshot((documentSnapshot) => {
        const data = documentSnapshot.data();
        setSensorData(data);
        setLoading(false);
      });

  }, [currentFarmId, currentSensorId]);s
  if (loading) {
    return <LoadingIndicator />;
  }

  // Render
  return (
    <View>
      <Text>{sensorData.sensorType}</Text>
    </View>
if(加载){
返回;
}
//渲染
返回(
{sensorData.sensorType}
我的代码正确地删除了文档。但是,问题是我得到了一个错误:

[未处理的承诺拒绝:类型错误:未定义不是对象(评估'sensorData.sensorType')]


这似乎表明React试图在传感器被删除后重新渲染屏幕或其他什么?我的代码中有缺陷吗?

应该很简单,
sensorData
为空或未定义,这就是为什么会出现异常

简单地编辑上面的代码到下面应该可以解决这个问题

<Text>{sensorData?.sensorType}</Text>