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>