Это более простая версия. Я удалил переменную timeout
, так как не понимаю, зачем вы ее используете.
import React, { useState, useCallback } from "react";
// import "./App.css";
// let timeout; // this variable wasn't scoped inside the function?.
const EMPTY_STRING = "";
function App() {
const [name, setUserName] = useState("");
const [password, setUserPassword] = useState("");
const [showHackMessage, setShowHackMessage] = useState(false);
const [timer, setTimer] = useState(null);
const enterUserName = useCallback(
value => {
console.log(value);
setUserName(value);
},
[setUserName]
);
const enterUserPassword = useCallback(
value => {
setShowHackMessage(false);
setUserPassword(value);
console.log("password value", value);
if (timer) {
console.log("clear Timer=>", timer);
clearTimeout(timer);
}
if (value !== EMPTY_STRING) {
setTimer(setTimeout(() => setShowHackMessage(true), 5000));
console.log("set Timer=>", timer);
}
console.log("password", password);
},
[setUserPassword, setShowHackMessage, password, timer]
);
return (
<div className="App">
<p>Login-Hacker</p>
<input
name={"email"}
value={name}
onChange={e => enterUserName(e.target.value)}
/>
<br />
<br />
<input
name={"password"}
value={password}
onChange={e => enterUserPassword(e.target.value)}
/>
<p>Powered by Saurabh</p>
{name.length > 0 && <p>Your name is {name}</p>}
{password.length > 0 && <p>Your password is {password}</p>}
{showHackMessage && <p className="awesome">Now you are hacked!</p>}
</div>
);
}
export default App;