reactjs - 使用布尔值的数组依赖性时,useEffect 始终有效
问题描述
我正在使用 useeffect 来捕获操作成功消息并显示成功消息。它工作正常,但是当我转到其他页面并返回时,总是会显示成功消息。我将添加示例代码..
const saveProfile = (userData) => dispatch(_UpdateProfile(userData));
const saveProfileSuccess = useSelector(state => state.UserReducer.saveProfileSuccess);
useEffect(() => {
if (saveProfileSuccess) {
showSuccessMessage("The user profile has been updated successfully.");
}
}, [saveProfileSuccess])
场景是......我需要在调用“saveProfile”操作方法后显示成功消息并做一些事情。所以保存完成后,成功结果“saveProfileSuccess”将为真。“saveProfileSuccess”的值为真,当我们去其他页面并返回并进入useEffect并再次显示成功消息时。
解决方案
当您保存配置文件时,您将触发一个更新saveProfileSuccess
减速器中存储的操作。
一旦这个值被改变,useEffect 就会被触发,因为它是一个依赖项。当您转到不同的路线并再次返回该页面时,您会再次看到successMessage,因为
useEffect(() => {
if (saveProfileSuccess) {
showSuccessMessage("The user profile has been updated successfully.");
}
}, [saveProfileSuccess])
上述 useEffect 会在组件第一次挂载时以及 saveProfileSuccess 值发生变化时运行。
所以你应该做的是,当你从这个组件卸载时,你可以在 useEffect 中添加一个清理功能。
useEffect(() => {
return () => // fire your action here which sets the saveProfileSuccess to false
}, [])
推荐阅读
- pine-script - 在 pine 脚本中逐条满足某些条件
- flutter - 行内列,非行子在横轴上居中,为什么?扑
- python-3.x - try except 语句是否等同于执行或执行其他?
- charts - 如何称为 KPI,按月公开以仍打开的文件计数为中心的“已接收”和“已发布”文件的计数?
- javascript - 套接字已连接但未发出消息
- javascript - Javascript 评论 iframe 回复
- javascript - 如何将计数监视器添加到数组差异中?
- python - 通过查询字符串参数覆盖 flask_restful 内容协商/响应类型
- google-cloud-firestore - 云存储功能不是从应用程序(flutter)触发,而是在直接在firestore中进行更改时触发
- javascript - 如何定位特定类中的 id?