【发布时间】:2020-10-29 13:59:09
【问题描述】:
我做了很多研究并阅读了 firebase 上的多个 stackoverflow 问题。有些是有帮助的。但没有一个对我的问题特别有帮助。我正在尝试制作菜单计划器。例如,我需要不止一项检查来测试是否。日期存在,serviceType === to "lunch" || “晚餐”。
我有一个添加和图像保存 url 和输入数据到反应状态的功能。然后我使用 useEffect 来监听状态更新并将数据发送到 firebase。我只想将新数据发送到 firebase IF 所有的检查都通过并且它们不存在。否则我想更新我的数据。我试过了。 Foreach, for in, ref('link/'+ localState.id)。许多不同的方法我似乎无法正确。
这是表单提交功能:
const handleSubmit = (e) => {
e.preventDefault();
if (image) {
const uploadTask = storage.ref(`images/${image.name}`).put(image);
uploadTask.on(
"state_changed",
(snapshot) => {
const progress = Math.round(
(snapshot.bytesTransferred / snapshot.totalBytes) * 100
);
setProgress(progress);
},
(error) => {
setError(error);
},
() => {
storage
.ref("images")
.child(image.name)
.getDownloadURL()
.then((url) => {
const value = state.serviceType;
const keys = Object.keys(value);
var filtered = keys.filter(function (key) {
return value[key];
});
/////////I have also tried this method, to use one function for all instead of using useEffect//////
const mealData = db().ref().child("meals");
const newMealdata = mealData.push();
// newMealdata.set({
// serviceId: newMealdata.key,
// date: props.dates,
// serviceType: filtered,
// service: {
// mealService: state,
// image: url,
// },
// });
///////////////////////////////////////////////
setNewState((prev) => {
return {
...newState,
date: props.dates,
serviceType: filtered,
serviceId: newMealdata.key,
service: state,
};
});
setProgress(0);
});
}
);
} else {
setError("Error Please Choose an Image to Upload");
}
};
使用效果函数
useEffect(() => {
console.log("newState mounterd: ", newState);
db()
.ref("meals/" + newState.serviceId)
.set({ newState });
}, [newState]);
我尝试使用 state.id 来检查它是否等于 snapshot.key,尽管他们确实检查过。 firebase 仍然会创建一个新的数据节点,该节点具有相同的日期,但具有不同的 Id 和我想要更新的数据。
那么最好怎么说:
if(snapshot.val().date === props.dates && snapshot.val().serviceId === snapshot.key && servicetype === "lunch" || 'dinner'){
update({with new inserted data})
}else if(data doesn't match){
ref('meals').set({createNewNode})
}
【问题讨论】:
标签: javascript reactjs firebase firebase-realtime-database