#reactjs #firebase
#reactjs #firebase
Вопрос:
У меня есть две кнопки, которые фильтруют, какая категория отображается. Фильтрация работает нормально, и записи отображаются правильно. Прямо сейчас в начале отображается только одна категория. Мой вопрос в том, как мне установить категорию, чтобы она отображала все записи в начале? Вот мой код:
const [category, setCategory] = useState( "design");
function useCourses() {
const [courses, setCourses] = useState([]);
useEffect(() => {
db.collection("projects")
.where("category", "==", category)
.get()
.then((snapshot) => {
let data = [];
snapshot.forEach((doc) => {
data.push({
...doc.data(),
id: doc.id,
});
return data;
});
setCourses(data);
})
.catch((e) => {
console.log(e);
});
}, [category]);
return courses;
}
const courses = useCourses();
и кнопки:
<button
className="projects__controls__button"
onClick={() => setCategory("web")}
style={{ color: theme.color, borderColor: theme.color }}
>
Web
</button>
<button
className="projects__controls__button"
onClick={() => setCategory("design")}
style={{ color: theme.color, borderColor: theme.color }}
>
Design
</button>
Спасибо за помощь
Комментарии:
1. Итак, вы пытаетесь отобразить все категории в начале, и вы хотите фильтровать только тогда, когда пользователь явно выбирает категорию, верно?
Ответ №1:
Вы могли бы установить начальное значение category
как null или пустую строку.
Затем в последующем коде,
useEffect(() => {
let collection = db.collection("projects");
if (category) {
collection = collection.where("category", "==", category);
}
collection.get()...
.
.
.