У меня есть следующее раскрывающееся меню:
Код: Выделить всё
Seleccione una empresa
{registeredCompanies.map((company, idx) => (
{company.nombre}
))}
Код: Выделить всё
const RiskTable = () => {
const [registeredCompanies, setRegisteredCompanies] = useState([]);
const [selectedCompany, setSelectedCompany] = useState("");
const [selectedLogo, setSelectedLogo] = useState(null);
const loadCompanies = async () => {
const query = await getDocs(collection(db, "empresas"));
const fetched = query.docs.map((doc) => ({
id: doc.id,
nombre: doc.nombre,
...doc.data(),
}));
setRegisteredCompanies(fetched);
};
const handleCompanyChange = (e) => {
const compObj = registeredCompanies.find((a) => a.id === e.target.value);
setSelectedCompany(compObj.id);
setSelectedLogo(compObj ? compObj.logo : null);
if (selectedCompany !== "") {
loadAreas();
loadFolders();
}
};
const [selectedArea, setSelectedArea] = useState("");
const [registeredAreas, setRegisteredAreas] = useState([]);
const loadAreas = async () => {
const query = await getDocs(
collection(
db,
"Empresas_004_Herramientas_Manuales",
selectedCompany,
"areas"
)
);
console.log(selectedCompany);
const fetched = query.docs.map((doc) => ({
id: doc.id,
nombre: doc.nombre,
...doc.data(),
}));
setRegisteredAreas(fetched);
};
const handleAreaChange = (e) => {
const selectedName = e.target.value;
setSelectedArea(selectedName);
};
const [folders, setFolders] = useState([]);
const loadFolders = async () => {
const query = await getDocs(
collection(
db,
"Empresas_004_Herramientas_Manuales",
selectedCompany,
"carpetas"
)
);
const fetched = query.docs.map((doc) => ({
id: doc.id,
nombre: doc.nombre,
...doc.data(),
}));
setFolders(fetched);
};
};
Что он делает в настоящее время: использует идентификатор из выбранного в данный момент параметра, чтобы найти объект JSON с тем же идентификатором, затем установить идентификатор ранее выбранной компании и загрузить соответствующий логотип, области и папки.
Визуально, когда я изменяю свою функцию для отладки следующим образом:
Код: Выделить всё
const handleCompanyChange = (e) => {
const compObj = registeredCompanies.find((a) => a.id === e.target.value);
setSelectedCompany(compObj.id);
setSelectedLogo(compObj ? compObj.logo : null);
console.log("selected company: ", selectedCompany);
console.log("selected object: ", compObj.id);
console.log("=======================================");
if (selectedCompany !== "") {
loadAreas();
loadFolders();
}
};
выбранная компания: 0JQUHpMaIJ1yOYFR5wWh
выбранный объект: 1kOlRMmIICny12rmlbD5
==================================
В результате чего loadFolders и loadAreas загружают папки и области для другой компании.
Мне нужно сохранить идентификатор в selectedCompany, поскольку он реализован в остальной части приложения, которое кстати.
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-wrong-id
Мобильная версия