Reactjs 使用redux操作写入Firebase DB会在DB中写入全新的数据

Reactjs 使用redux操作写入Firebase DB会在DB中写入全新的数据,reactjs,firebase,firebase-realtime-database,react-redux,Reactjs,Firebase,Firebase Realtime Database,React Redux,我正在尝试在React应用程序中写入Firebase DB。如果我使用DB reference和set方法,它会添加新的数据条目。然而,当我通过redux操作使用相同的方法时,它会写入一个全新的数据 这就是有效的代码 const notesRef = firebase.database().ref('notes'); const noteRef = notesRef.child(this.state.noteId); const note = {

我正在尝试在React应用程序中写入Firebase DB。如果我使用DB reference和set方法,它会添加新的数据条目。然而,当我通过redux操作使用相同的方法时,它会写入一个全新的数据

这就是有效的代码

      const notesRef = firebase.database().ref('notes');
      const noteRef = notesRef.child(this.state.noteId);

      const note = {
        text: this.state.text,
        timestamp: this.state.timestamp,
        title: this.titleTextArea.value,
      }

      noteRef.set(note);
这就是行动

      export const addNote = (newNoteId, newNote) => async dispatch => {
            notesRef.child(newNoteId).set(newNote);
      };
坏结果:

notes: "a6ff48e4-f34a-483f-a639-b0dbfd703009"
好结果:

notes:
      b85def67-3877-4d2f-b5c7-23d8295768ad
            text: "{\"ops\":[{\"insert\":\"fsasfs\\n\"}]}"
            timestamp: 1557467143056
            title: "asfa"

      e4290153-a40c-464f-a92a-39eded74bd2a
            text: "{\"ops\":[{\"insert\":\"sadfasdfsd\\n\"}]}"
            timestamp: 1557467154054
            title: "asdfsdaf"


那么firebase的什么“设置”功能会用新数据替换现有数据呢。使用“更新”功能更新数据库

//get new key
var newPostKey = firebase.database().ref().child(newNoteId).push().key;

//Update existing
 export const addNote = (newNoteId, newNote) => async dispatch => {
    let update = {}
    update[newPostKey] = newNote
    notesRef.update(update);
 };


快乐编码:)

那么firebase的什么“设置”功能会用新数据替换现有数据呢。使用“更新”功能更新数据库

//get new key
var newPostKey = firebase.database().ref().child(newNoteId).push().key;

//Update existing
 export const addNote = (newNoteId, newNote) => async dispatch => {
    let update = {}
    update[newPostKey] = newNote
    notesRef.update(update);
 };


快乐编码:)

基本规则设置覆盖,更新特定于每个节点。改用update。您还可以使用push让firebase自动生成唯一的节点名:

设置:

使用set()覆盖指定位置的数据,包括 子节点

更新:

同时写入节点的特定子节点而不使用 覆盖其他子节点时,请使用update()方法


设置基本规则,覆盖和更新特定于每个节点。改用update。您还可以使用push让firebase自动生成唯一的节点名:

设置:

使用set()覆盖指定位置的数据,包括 子节点

更新:

同时写入节点的特定子节点而不使用 覆盖其他子节点时,请使用update()方法



你要把行动派往哪里?@RahulRana你说的哪里是什么意思?@RahulRana啊。。。我明白你的意思。我有一个错误的动作文件,我以为我删除了,这个文件被导入到我的组件中。现在可以了。谢谢大家!@RahulRana不知怎的,在退出应用程序之前,一个被删除的文件是活动的,所以我直到Ctrl-C并重新运行应用程序时才发现错误。@RahulRana被删除的文件包含notesRef.set(newNote),这就是它设置整个数据库的原因。你在哪里调度操作?@RahulRana你说的Where是什么意思?@RahulRana啊。。。我明白你的意思。我有一个错误的动作文件,我以为我删除了,这个文件被导入到我的组件中。现在可以了。谢谢大家!@RahulRana不知何故,一个被删除的文件在退出应用程序之前是活动的,所以我直到Ctrl-C并重新运行应用程序时才发现错误。@RahulRana被删除的文件包含notesRef.set(newNote),这就是它设置整个数据库的原因。我认为在这里使用set方法没有任何问题。如果是这样的话,没有redux操作它也不应该工作。当通过操作使用Update方法时,它也不起作用。我认为在这里使用set方法没有任何问题。如果是这样的话,没有redux操作它也不应该工作。当通过操作使用更新方法时,更新方法也不起作用。我尝试过更新方法,但它的作用完全相同。您确定更新的级别正确吗?如果您是在包含其他节点的更高级别进行更新,则可能会覆盖这些节点。我删除了一个路径错误的文件。但是该文件仍然被应用程序识别,因为我在删除该文件后没有关闭它。我想每当我删除一个文件时,我都必须重新启动应用程序以防万一。我尝试过更新方法,但它的作用完全相同。你确定你的更新级别正确吗?如果您是在包含其他节点的更高级别进行更新,则可能会覆盖这些节点。我删除了一个路径错误的文件。但是该文件仍然被应用程序识别,因为我在删除该文件后没有关闭它。我想每当我删除一个文件时,我必须重新启动应用程序以防万一。