# #javascript #reactjs #firebase #google-cloud-firestore #components
Вопрос:
В настоящее время я использую кнопку с функцией onClick для добавления компонента JSX в пользовательский интерфейс при каждом его нажатии. Я также использую эффект использования с некоторой логикой базы данных firebase, которая представляет собой onSnapshot, позволяющий выполнять оперативное считывание данных для отображения информации в пользовательском интерфейсе.
Проблема в том, что когда пользователь обновляет страницу, функция onClick, добавляющая JSX, удаляется из состояния и не отображает данные firebase в пользовательском интерфейсе. Как бы я решил эту проблему?
Код:
import React, { useEffect, useState } from "react";
import DashboardBody from "./DashboardComponents/DashboardBody";
import db from "../../firebase";
function Test() {
const [exercise, setExercise] = useState([]);
const [count, setCount] = useState(0);
useEffect(() => {
db.collection("users").onSnapshot((snapshot) => {
setExercise(
snapshot.docs.map((doc) => ({
id: doc.id,
exercise: doc.data().exercise,
}))
);
});
return;
}, []);
return (
<div>
{[...Array(count)].map((count, index) => (
<DashboardBody key={index} exercise={exercise} />
))}
<div>
<button onClick={() => setCount(count 1)}>Click</button>
</div>
</div>
);
}
export default Test;
Ответ №1:
count
Переменная сохраняется в состоянии компонента и увеличивается при каждом нажатии кнопки. Когда страница перезагружается (или компонент размонтируется и монтируется снова), переменная состояния теряется. Чтобы сохранить состояние, вам придется сохранить его в базе данных (или в хранилище браузера), чтобы вы могли извлечь его при повторном монтировании компонента.
Комментарии:
1. Спасибо, действительно ценю это, я изучу эти методы и попытаюсь применить их к своему коду 🙂