调用Firebase set方法设置昵称时删除整个用户节点,求排查原因
问题原因与解决方案
嗨,我来帮你搞定这个问题~
你遇到的用户节点被删除的问题,根源在于你用了set()方法!Firebase Realtime Database的set()是个全量替换的操作——不管你目标节点下原本有多少数据,只要调用set(),它就会把整个节点的内容彻底替换成你传入的对象。举个例子:如果之前users/{uid}里存了email、createTime这些字段,你调用set({ nickname: xxx })后,这些原有字段都会被删除,整个节点就只剩下nickname这一个字段;要是原本节点是空的,那没问题,但只要有其他数据,就会被“清空替换”。
那正确的做法是什么?用update()方法!这个方法是增量更新,只会修改你指定的字段:
- 如果
nickname字段已经存在,它会更新成新值; - 如果
nickname字段不存在,它会自动添加这个字段; - 其他已存在的字段完全不受影响。
修改后的代码如下:
writeDataToFirebase() { firebase .database() .ref('users/' + firebase.auth().currentUser.uid + '/') .update({ nickname: this.state.nickname }); }
这样操作后,你就能安全地设置或修改nickname字段,再也不用担心整个用户节点被意外删除啦~
内容的提问来源于stack exchange,提问作者Emilis
相关产品推荐
相关产品推荐

