Запись в базу данных Firebase с использованием действия приставки записывает новые данные в базу данных - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь записать в БД Firebase в приложении React.Он добавляет новый ввод данных, если я использую ссылку на БД и метод set.Тем не менее, он записывает совершенно новые данные, когда я использую тот же метод через действие приставки.

Это код, который работает.

      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);
      };
      const note = {
        text: this.state.text,
        timestamp: this.state.timestamp,
        title: this.titleTextArea.value,
      }

      this.props.addNote(this.state.noteId, note);

Плохой результат:

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"

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Основным правилом является установка переопределений, а обновление - для каждого узла.Используйте обновление вместо.Вы также можете использовать push, чтобы firebase автоматически генерировал уникальное имя узла:

Set:

Использование set () перезаписывает данные в указанном месте, включая любые дочерние узлы.

Обновление:

Для одновременной записи в определенные дочерние узлы без перезаписи других дочерних узлов используйте метод update ().

https://firebase.google.com/docs/database/web/read-and-write https://firebase.google.com/docs/database/admin/save-data

1 голос
/ 10 мая 2019

Итак, какая функция 'set' в firebase заменяет существующие данные новыми.Используйте функцию «update» для обновления базы данных.

//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);
 };

Happy Coding:)

...