Обновление браузера перезаписывает дочерний контент в Firebase

Я полный новичок в мире баз данных. Я пытаюсь использовать базу данных Firebase, и вот проблема, с которой я сталкиваюсь: я хочу создать простую подписку, в которой пользователь должен писать информацию, и эта информация должна храниться в базе данных Realtime. То есть, когда пользователь вводит свою информацию и нажимает кнопку «зарегистрироваться», должен быть создан пользователь 1, затем пользователь 2 вводит свою информацию, и пользователь 2 должен быть создан, но все они должны быть «дочерними элементами» одного уровня. Казалось, все работает нормально, я создал объект (в Javascript), затем добавил в базу данных как «дочерний элемент» с именем «пользователь 1», но когда я обновил страницу и ввел другую информацию для пользователя 2, эта информация перезаписала пользователя 1, но когда я просто удаляю информацию о пользователе 1 из полей ввода в браузере (без обновления) и ввожу информацию о пользователе 2, он создает второго «потомка» с именем пользователя 2, как и должно было быть, и это то, что я хочу быть. Вопрос в том, почему обновление браузера перезаписывает предыдущую информацию. Вот мой код js:

function submitClick(x){
    var firebaseRef = firebase.database().ref();
    user_number ++;
    firebaseRef.child("user" + " " + user_number).set(x);
}

function signup(){
    var first_name = document.getElementById("first_name").value;
    var last_name = document.getElementById("last_name").value;
    var username = document.getElementById("user_name").value;
    var password = document.getElementById("password").value;
    var obj = {
        First_Name: first_name,
        Last_Name: last_name,
        Username: username,
        Password: password
    }
    return obj;
}

var hold;
var user_number = 0;
submit_btn.onclick = function() {hold = signup(); submitClick(hold)};

а html - это просто поля ввода и кнопка с именем «зарегистрироваться»

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
50
1

Ответы 1

Когда вы перезагружаете страницу, JavaScript перезагружается и снова выполняется с нуля. Он не помнит, что происходило до того, как вы его перезагрузили.

Это означает, что эта строка выполняется снова:

var user_number = 0;

Таким образом, user_number снова начинает отсчет от 0.

Самый простой способ решить эту проблему - использовать метод Firebase push():

function submitClick(x){
    var firebaseRef = firebase.database().ref();
    firebaseRef.push().set(x);
}

Это создает новый уникальный идентификатор в корневом каталоге, где он устанавливает пользователя. Хотя эти так называемые push-идентификаторы не так легко читаются, как ваши номера, они гарантированно будут уникальными для перезагрузок, нескольких пользователей и даже в автономных / онлайн-условиях.

Большое спасибо. Это сработало. Еще один вопрос, пожалуйста. Можно ли сказать, что firebaseRef.push () создает своего рода экземпляр под корневым ref, а затем с помощью set (x) мы помещаем данные под этот экземпляр?

Suren 22.05.2018 07:06

Типа ... push() генерирует ссылку на новое уникальное местоположение. Чтобы узнать больше об этом, см. firebase.googleblog.com/2014/04/… и firebase.googleblog.com/2015/02/….

Frank van Puffelen 22.05.2018 15:05

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