javascript 当我点击退出按钮,使计时器停止,如何做到这一点?

oknrviil  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(156)

LabPart.jsx-在这里,我希望,当我单击退出按钮时,它会将我重定向到登录页面,计时器将停止在那里,当我从登录页面登录时,计时器将从停止的地方开始。我该怎么做呢?这里我调用了clearInterval()停止计时器,但它不工作。登录后,我甚至无法运行它。请帮助我。
实验室部件.jsx-

import React, {useState, useEffect} from 'react';
import Login from './Login';

const LabPart = ({Time , password}) => {

  const [pass, setPass] = useState(password);
  const [timeRemaining, setTimeRemaining] = useState(Time);
  let stop = timeRemaining;
  let interval = null;

  
  useEffect(() => {
    interval = setInterval(() => {
      setTimeRemaining((time) => time - 1);
    }, 1000);
    return () => clearInterval(interval);
  }, []);

  const handleExitClick = () => {
    console.log("logout successful");
    clearInterval(interval);
    setPass("");
  };

  // console.log(timeRemaining);

  const hours = Math.floor(timeRemaining / 3600);
  const minutes = Math.floor((timeRemaining % 3600) / 60);
  const seconds = timeRemaining % 60;

  return (
    <>
    {pass && timeRemaining>=0 ?
      (<div>
         <p>Time remaining: {hours}h {minutes}m {seconds}s</p>
         <button onClick={handleExitClick}>Exit</button>
      </div>)
     : (<Login newTimeRemaining={stop} truee={true}/>)
    } 
    </>
  )
}

export default LabPart;

Login.jsx -在单击退出按钮之后,我想在登录页面上显示剩余的时间。

import React, { useState, useEffect } from "react";
import LabPart from "./LabPart";
import '../style/login.css';

const Login = ({newTimeRemaining,truee} ) => {
  const [password, setPassword] = useState("");
  const [timeRemaining, setTimeRemaining] = useState(10);
  const [openPage, setOpenPage] = useState(false);
  // const [netTime, setNewtime] = useState(timeRemaining1);

  const handlePasswordChange = (event) => {
    setPassword(event.target.value);
  };

  const handleFormSubmit = (event) => {
    event.preventDefault();
    // setNewtime(timeRemaining1);
    // if(newTimeRemaining<0)
    // {
    //     setTimeRemaining(newTimeRemaining)
    // }
    if (password === "12345" ) {
      console.log("login successful");
      setOpenPage(true);
    }
    else {
      alert("Incorrect Password")
    }
  };

  return (
    <>
    {openPage ?  <LabPart Time={10} password={password} />
      :
    <form onSubmit={handleFormSubmit}>
        <input
          type="password"
          value={password}
          onChange={handlePasswordChange}
        />
        <button type="submit">Enter</button>
        {
          x ? newTimeRemaining : timeRemaining
        }
      </form> 
    }
      
    </>
  );
};

export default Login;
x6492ojm

x6492ojm1#

你应该理解react是非常不同的(不同于vue和angular)构造函数在需要更新时总是回调,而不需要任何缓存创建interval作为state

const [interval, setCInterval] = useState(null) //let interval = null;

  
  useEffect(() => {
    setCInterval(
      setInterval(() => {
        setTimeRemaining((time) => time - 1);
      }, 1000)
    )
    return () => clearInterval(interval);
  }, []);

相关问题