Обновление массива объектов в базе данных Firebase Realtime в React js

У меня проблема с обновлением определенных свойств массива объектов в базе данных реального времени в Firebase.

Мой объект выглядит следующим образом (см. рисунок).

Теперь я хочу обновить свойство IsComing второго объекта-участника.

На данный момент я использую функцию updateIsComming(), но это не очень убедительно, потому что мне нужно переписать весь объект.

 function updateIsComming() {
   
    const db = getDatabase();
    update(ref(db, " your_path/EventModel/" + modelkey ), {
      Location: "London",
      Participants: [
        { Name: "Bella2", IsComming: "true" },
        { Name: "Tom", IsComing: "true" },
      ],
    });

Вместо этого я просто хочу сослаться на конкретную опору из этого массива. Например

Участник[1].IsComming = false;

Есть ли способ напрямую получить доступ к определенному массиву объекта.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Массивы как структура данных не рекомендуются в базе данных Firebase Realtime. Чтобы узнать почему, я рекомендую прочитать Лучшие практики: массивы в Firebase.

Одна из причин этого заключается в том, что вам нужно прочитать массив, чтобы определить индекс элемента для обновления. Шаблон:

  1. Считайте массив из базы данных.
  2. Обновите необходимые элементы в массиве в коде приложения.
  3. Запишите обновленный массив обратно в базу данных.

Как вы уже поняли, это не идеально. Как это часто бывает в базах данных NoSQL, рассмотрите альтернативную структуру данных, которая лучше подходит для конкретного случая использования.

В этом случае следует рассмотреть альтернативную структуру данных:

Participants: {
  "Bella2": true,
  "Tom": true
}

Там мы используем имя участника в качестве ключа, что означает:

  • Каждый участник может присутствовать в объекте только один раз, поскольку ключи в объекте по определению уникальны.
  • Теперь вы можете обновить статус пользователя по его имени с помощью: update(db, "your_path/EventModel/" + modelkey + "/Participants/Tom", false).

Что делать, если у моих участников есть более двух свойств, например, Имя, Приходит, Телефонный номер и т. д. В этом случае, что было бы лучшей структурой данных?

Vladbt 26.12.2022 11:55

В этом случае структура будет выглядеть так Participants: { Bella2: { IsComing: "true", PhoneNumber: "12345" }, Tom: { IsComing: "false", PhoneNumber: "123456" }, } Но как я могу обновить статус пользователя?

Vladbt 26.12.2022 14:12

И что, если у меня есть участники с таким же именем? В этом случае лучше использовать индивидуальный ключ, верно?

Vladbt 26.12.2022 14:16

1) Вы можете хранить объект, а не просто true, например. "Tom": { IsComing: true, etc }. Затем обновление становится update(db, "your_path/EventModel/" + modelkey + "/Participants/Tom/Iscoming", false) --- 3) Если у вас есть несколько участников с одним и тем же именем, у вас будет та же проблема в вашей текущей структуре данных: если Tom хочет обновить свой статус IsComing, как вы узнаете, для кого Tom сделать так? --- Смотрите также Что делать, когда кто-то отвечает на мой вопрос?

Frank van Puffelen 26.12.2022 17:29

Другие вопросы по теме