javascript - 将 React-Hook 与重定向和 setTimeout 结合使用

标签 javascript reactjs redirect react-hooks

我在注册用户后显示了一个模式,我希望它在重定向几秒钟后消失

正如我上面所写,我使用了 hooks + useffect 但不能:/

Hook

    const [redirect, setRedirect] = useState(true)

    useEffect(() => {
    const interval = setInterval(() => {
      setRedirect(redirect => redirect - 1);
    }, 1000);
    return () => clearInterval(interval);
  }, []);

我的模态

            <Modal className="modalValidateRegister" isOpen={modalOpen} toggle={() => setModalOpen(!modalOpen)} >
                <div className="containerModaluser">
                    <ModalBody>
                        <h1 className="welcomeRegister" >Bienvenue chez</h1> <img className="iconBrableRegister" src={brable} alt="icone-user" /> <span className="userRegister">{username}</span>
                        <img className="iconBeer" src={tchin} alt="icone-user" />
                        <Link to="/PaymentScreen">
                            <label className="linkPayment" href="">C'est l'heure de payer ta tournée !</label>
                        </Link>
                        Redirection dans {redirect}. 
                        <img className="iconBeer2" src={tchin} alt="icone-user" />
                    </ModalBody>
                </div>
            </Modal>

认证用户后我的axios


    const onSubmit = async function onSubmit(values) {
        axios({
            method: 'POST',
            url: 'http://localhost:4242/registerUser',
            data: values,
            headers: { 'Content-Type': 'application/json' },
        })
            .then((res) => {
                localStorage.setItem("token", res.headers["x-access-token"])
                setModalOpen(true);
                setUsername(nameRef.current.value);
                setRedirect(true);
            })
            .catch(function (erreur) {
                //On traite ici les erreurs éventuellement survenues
                console.log(erreur);
            })
    }

最佳答案

您的 useEffect 仅在组件安装后才会被调用,因为您在第二个参数中传递了 [] 。如果你想根据某种状态产生副作用,你应该这样:

useEffect(() => {
    let interval = null;
    if (redirect) {  
       setRedirect(false);
       interval = setInterval(() => {
          // Redirect to another page
       }, 1000);
    }
    return () => interval ? clearInterval(interval) : null;
  }, [redirect])

传递您想要产生副作用的属性是您必须做的。 https://reactjs.org/docs/hooks-effect.html

关于javascript - 将 React-Hook 与重定向和 setTimeout 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58325897/

相关文章:

javascript - 是否可以导出和导入整个 JS 文件,而无需在每个函数中添加 Export 和 Import 等?

reactjs - 如何在react/webpack 2设置中导入 Electron ipcRenderer

javascript - 在 React Redux 中改变状态的正确位置

javascript - 尝试编译此代码根本行不通。从react.js和vscode中获取解析错误

javascript - 单击时的 window.location.assign 在 iOS 中不起作用

javascript - 如何比较数组中不同对象的值

javascript - JQuery if-else 跳过第一个有效条件后的所有内容

php - 如何重定向到 PHP 中的感谢页面

php - 如何在 php 中重定向页面

javascript - 如何使两列重复列表中的一项?