2017-08-14 40 views
0

我有一個火力地堡的數據庫結構是這樣的:更新火力地堡與動態性能

-KrVtLbX7w8LKHC888cx 
    siteInfo 
     description: "Udemy is an online learning and teaching market..." 
     siteName: "Udemy" 
     title: "Udemy Online Courses - Learn Anything, On Your ..." 
     type: "video_lecture" 
     url: "https://www.udemy.com/" 

每個siteInfo節點可能包含不同的密鑰(即一個可能沒有type,另一個可以有一個img。 )。這使數據鍵相對動態,所以我不能在firebase.update中明確地設置它們。

在前端,我有一個表單讓用戶編輯網站信息。該表單顯示用戶要編輯的各個輸入字段中的數據,具體取決於用戶選擇哪個站點,這非常有效。

我的問題是提交更新到用戶更新的數據節點。

現在我設置狀態爲有這樣的變化,輸入:

handleChange = ({target}) => { 
    this.setState({ 
     [target.name]: target.value 
    }); 
    } 

和更新這樣的節點:

firebase.database().ref().child(`paths/${this.props.uid}/${key}`); 
    let siteInfo = this.state; 
    firebaseRef.update({ 
    siteInfo 
    }); 

這是什麼東西做的是刪除整個siteInfo節點並僅添加用戶已編輯的字段。因此,與其讓這僅說明已更新:

-KrVtLbX7w8LKHC888cx 
    siteInfo 
     description: "The updated description!" 
     siteName: "Udemy" 
     title: "Udemy Online Courses - Learn Anything, On Your ..." 
     type: "video_lecture" 
     url: "https://www.udemy.com/" 

我得到這個在那裏的更新由用戶所做的編輯,但一切被刪除:

-KrVtLbX7w8LKHC888cx 
    siteInfo 
     description: "The updated description!" 
     siteName: "The updated site name!" 

我想它只更新那些已經更新的密鑰。這是我對Firebase的.update方法應該如何工作的理解,但由於某些原因,它只是覆蓋這裏的所有內容。

回答

0

這實際上是我的一個非常愚蠢的套路。國家已提交數據作爲一個對象,而不是這樣做這(與額外的對象包裝)的:

firebaseRef.update({ 
    siteInfo 
    }); 

我剛做這個:

firebaseRef.update(siteInfo);