reactjs - 未定义变量时如何等待
问题描述
我有两个“useEffect”,第一个只运行一次,第二个在每次更新日期时运行。问题是第二个 useEffect 取决于在第一个 useEffect 上设置的值。有没有什么简单的方法可以让第二个 useEffect 等待该变量被定义?
这就是我所拥有的:
useEffect(() => {
database.collection('EmpleadosDev').get()
.then(response => {
const fetchedEmpleados = [];
const emails = [];
response.forEach(document => {
const fetchedEmpleado = {
id: document.id,
...document.data()
};
fetchedEmpleados.push(fetchedEmpleado);
fetchedEmpleados.forEach(element => {
emails.push(element.Email)
});
if (!emails.includes(currentUser.email)) {
alert('Este usuario no tiene permisos de acceso. Serás redirigido al login');
firebase.auth().signOut();
throw BreakException;
} else {
setEmpleadoSeleccionado(fetchedEmpleados[emails.indexOf(currentUser.email)]) **//This is what I need on the second useEffect**
}
});
setEmpleados(fetchedEmpleados);
})
}, [])
这是第二个使用效果:
useEffect(() => {
if (empleadoSeleccionado !== undefined) //This works only when I update "startDate" {
database.collection('NegociosDev').doc(empleadoSeleccionado.RefNegocio.path.split('/')[1]).collection('Negocios').doc(empleadoSeleccionado.RefNegocio.path.split('/')[3]).collection('citas').get()
.then(response => {
const fetchedCitas = [];
const fetchedIDs = [];
response.forEach(document => {
const fetchedCita = {
id: document.id,
...document.data()
};
const fetchedID = document.id;
fetchedIDs.push(fetchedID);
if (fetchedCita.CheckIn.split(' ')[0] === startDate.toISOString().split('T')[0]) {
fetchedCitas.push(fetchedCita);
}
});
setCitas(fetchedCitas);
setIDs(fetchedIDs)
})
}
}, [startDate])
解决方案
我发现您可以像这样在 useEffect 上使用第二个参数:
useEffect(() => {
//code
}, [par1, par2])
并且每次更改时都会触发。
推荐阅读
- c# - C# .NET 串口打开并立即关闭在 115200
- python - 如何将 dicom 图像拆分为图块?
- scala - 移除对具有 Unit 返回类型的函数的调用时出现奇怪的 Scala 编译器错误,这怎么可能?
- javascript - 无法访问数据请求 Axios、React-Redux
- html - 没有 JavaScript 的图像翻转
- python - 如何知道嵌套字典中的列表中是否存在值
- ruby-on-rails - 如何在 Docker 中运行 Rails?PG::ConnectionBad 无法将主机名“pg”转换为地址:没有与主机名关联的地址
- html - 当我不使用 flexbox 页面布局时,如何让页脚占据剩余的高度?
- c# - System.Reflection.TargetInvocationException :调用的目标已引发异常
- elixir - 如何根据属性组织结构列表