首页 > 解决方案 > 未定义变量时如何等待

问题描述

我有两个“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])

标签: reactjs

解决方案


我发现您可以像这样在 useEffect 上使用第二个参数:

useEffect(() => {
    //code
}, [par1, par2])

并且每次更改时都会触发。


推荐阅读