javascript - 警报在反应项目中运行两次
问题描述
我的无效登录警报在我的反应项目中运行了两次,我不知道为什么。在与服务器端进行身份验证后,我将得到一个响应 true 或 false 并将其设置为 userLogin。
const [userLogin, setUserLogin] = useState(null);
function handleAlert() {
alert("Invalid Login, Please Try Again.");
document.getElementById("username").value = "";
document.getElementById("password").value = "";
}
这是我的 JSX
{userLogin == false && userLogin !== null
? (handleAlert(), setUserLogin(null))
: null}
我曾尝试在调用它之前放置一个箭头函数,但它完全停止工作。任何人都可以帮助它运行两次吗?谢谢
解决方案
似乎您的组件在状态更改之前重新渲染了两次,我建议使用 useEffect 来运行您在 handleAlert 中拥有的任何代码,并让该 useEffect 依赖于“userLogin”,
就像是
useEffect( () => {
if(userLogin == false && userLogin !== null){
alert("Invalid Login, Please Try Again.");
document.getElementById("username").value = "";
document.getElementById("password").value = "";
}
},[userLogin]);
这样您就可以 100% 确定代码只会在 userLogin 更改时运行 希望这对您有用
推荐阅读
- amazon-web-services - vpc 和 vpc 对等模块之间的 Terraform 状态冲突
- .net - Azure Application Insights 未显示整个事件链(在事件驱动的应用程序中),但所有遥测数据都存在
- javascript - 当我使用 AWS.S3.ManagedUpload javascript 在上传文件中添加标签值时,如何防止 & 变成 &?
- javascript - Is there a react way to store a mutable class instance objects in state?
- robotframework - Robot Framework 中的退出代码 127 和 255
- .net-core - 通过 SSL 使用 .net core TestHost/TestServer 调用第三方容器:使用 Testservers CreateClient() 方法绕过 SSL 验证
- jenkins - 如何使用 withCredentials 语法将秘密文件凭据添加到詹金斯管道阶段
- python - 如何根据条件减去pandas df中的列
- html - 如何在移动设备中显示与桌面相同的 bootstrap 4 卡结构?
- .net - ILMerge.Merge :程序集 Serilog 未正确合并。它仍然在目标程序集中列为外部引用