【发布时间】:2021-10-04 18:17:39
【问题描述】:
我有一个下拉组件和来自 Firebase 的数据,我需要过滤掉它们。第一次,选择有效,但第二次我得到一个空状态,不能全选或做出新的选择。 提前非常感谢。
具有数据库引用和过滤功能的主要组件:
import React, { useEffect, useState } from "react";
import firebase from "../firebase";
import Categories from "./Categories";
const TourMenu = () => {
const [tours, setTours] = useState([]);
useEffect(() => {
const dbRef = firebase.database().ref();
dbRef.on("value", (snapshot) => {
const data = snapshot.val();
const newToursArray = [];
for (let inventoryName in data) {
const toursObject = {
id: inventoryName,
name: data[inventoryName].name,
category: data[inventoryName].category,
seats: data[inventoryName].seats,
date: data[inventoryName].date,
};
newToursArray.push(toursObject);
}
setTours(newToursArray);
});
}, []);
const filterItemsCat = (category) => {
if (category === "all") {
setTours(tours);
return;
}
const newItems = tours.filter((item) => item.category === category);
setTours(newItems);
};
return (
<div>
<h1>Hello from tour menu</h1>
<Categories filterItemsCat={filterItemsCat} />
{tours
.sort((a, b) => a.date > b.date)
.map((x) => {
return (
<div
key={x.id}
style={{
border: "solid 1px",
bordercolor: "grey",
width: "230px",
margin: "10px auto",
}}
>
<p>{x.name}</p>
<p>{x.category}</p>
<p>date: {x.date}</p>
<p>seats: {x.seats}</p>
</div>
);
})}
<h2>{tours.length === 0 && "hold on ..."}</h2>
</div>
);
};
export default TourMenu;
这里是下拉组件(类别暂时硬编码):
import React from "react";
function Categories({ categories, filterItemsCat }) {
return (
<div className="categories-container wrapper">
<div className="btn-container">
<select onChange={(e) => filterItemsCat(e.target.value)}>
<option value="">--Please choose category--</option>
<option value="all">--CHOOSE ALL--</option>
<option value="land">land</option>
<option value="water">water</option>
</select>
</div>
</div>
);
}
export default Categories;
【问题讨论】:
-
你能创建一个代码沙箱(codesandbox.io)吗?
标签: reactjs firebase filter dropdown