Javascript React Native-firebase的可选值
我有一个定制的钩子:Javascript React Native-firebase的可选值,javascript,firebase,react-native,google-cloud-firestore,firebase-authentication,Javascript,Firebase,React Native,Google Cloud Firestore,Firebase Authentication,我有一个定制的钩子: import React, { useState, useEffect } from 'react'; import { Alert } from 'react-native'; import firebase from "../../firebase"; export default function useCurrentUserDetails() { const uid = firebase.auth().currentUser?.uid;
import React, { useState, useEffect } from 'react';
import { Alert } from 'react-native';
import firebase from "../../firebase";
export default function useCurrentUserDetails() {
const uid = firebase.auth().currentUser?.uid;
const [data, setData] = useState(null);
useEffect(() => {
if (!uid) {
setData(null);
return;
}
const unsubscribe = firebase.firestore().collection("users").doc(uid).onSnapshot((snapshot) => {
if (snapshot.exists) {
setData(snapshot.data());
} else {
setData(null);
}
})
return unsubscribe;
}, [uid]);
const updateCurrentUserData = (newData) =>
firebase.firestore().collection("users").doc(uid).set(newData).then(() => {
Alert.alert(
'Profile Updated',
'Nice work!',
[
{ text: 'OK' }
],
{ cancelable: false }
);
}).catch((error) => {
Alert.alert(
'Something went wrong',
'Give it another go',
[
{ text: 'OK' }
],
{ cancelable: false }
);
});
return [data, updateCurrentUserData];
}
在我看来,我调用以下内容:
const [currentUserDetails, setCurrentUserDetails] = useCurrentUserDetails();
按下按钮后,值将更新:
const handleSubmit = async () => {
setLoading(true)
const url = await uploadImage(profileURL, firebase.auth().currentUser?.uid)
await setCurrentUserDetails(
{ ...currentUserDetails,
username,
age: Number(age),
height,
country,
occupation,
profileURL: url,
}
)
setLoading(false)
}
我遇到的问题是,用户第一次尝试编辑数据时,除非我有所有字段,否则数据不会更新。如何将每个值设置为可选值
例如,假设此人只更新了
职业
,它将更新它并保留其余内容,而不会在数据库中为此创建任何字段。我不知道我是如何做到这一点的
y被分解为单独的字段
const updateUserProfile=(y)=>{
const{Age,Hobby,UserName,Job,Country,Name}=y;
返回firestore.collection(“users”).doc(`${currentUser.uid}`)。更新({
用户名:用户名,
爱好:爱好,
姓名:姓名,,
年龄:年龄,,
国家:国家,,
乔布:乔布,
});
};
这样我就可以更新我想要的任何字段。但就我而言,所有这些领域都已经有了 写入的默认数据,如用户名:用户名、爱好:爱好。然后我用用户更改的内容更新它 这就是我得到“y”的原因 userData是我从firestore获得的
const[data,setData]=useState({[name]:value});
const x=用户数据;
常数y=对象分配(x,数据);
抱歉,如果这是一个混乱的答案。我不知道我是如何做到这一点的 y被分解为单独的字段
const updateUserProfile=(y)=>{
const{Age,Hobby,UserName,Job,Country,Name}=y;
返回firestore.collection(“users”).doc(`${currentUser.uid}`)。更新({
用户名:用户名,
爱好:爱好,
姓名:姓名,,
年龄:年龄,,
国家:国家,,
乔布:乔布,
});
};
这样我就可以更新我想要的任何字段。但就我而言,所有这些领域都已经有了 写入的默认数据,如用户名:用户名、爱好:爱好。然后我用用户更改的内容更新它 这就是我得到“y”的原因 userData是我从firestore获得的
const[data,setData]=useState({[name]:value});
const x=用户数据;
常数y=对象分配(x,数据);
很抱歉,如果这是一个混乱的答案。“但在我的情况下,所有这些字段都已经写入了默认数据”-这很有帮助,我分配了默认值,并且所有的工作都很好,至少有点问题。哈哈。“但在我的情况下,所有这些字段都已经写入了默认数据”-这很有帮助,我指定了默认值,所有的工作都很好,至少是一些东西,哈哈。