Reactjs Redux:如何只发送一次useEffect中的操作?
我有一个日历应用程序,用户可以为每个日历页面上传1-4个图像 预期结果: 当用户上传一个质量不好的图像时,我有一个质量警告,应该为每个图像显示一次 当前结果: 现在,Reactjs Redux:如何只发送一次useEffect中的操作?,reactjs,redux,Reactjs,Redux,我有一个日历应用程序,用户可以为每个日历页面上传1-4个图像 预期结果: 当用户上传一个质量不好的图像时,我有一个质量警告,应该为每个图像显示一次 当前结果: 现在,useffect中的动作showtoos被多次触发。因此,例如,当我上传一个新图像时,删除另一个图像,等等。每次再次触发此质量警告时 我的方法: 我试图实现一个本地状态,以便切换布尔值(如果警告显示一次,则设置为false)。但我只能让它适用于所有图像(只要任何图像质量不好,本地状态就设置为false)。但我需要它是图像特定的 如果
useffect
中的动作showtoos
被多次触发。因此,例如,当我上传一个新图像时,删除另一个图像,等等。每次再次触发此质量警告时
我的方法:
我试图实现一个本地状态,以便切换布尔值(如果警告显示一次,则设置为false)。但我只能让它适用于所有图像(只要任何图像质量不好,本地状态就设置为false)。但我需要它是图像特定的
如果已显示特定图像的质量警告,则不再显示
代码:
export const useShowPoorImageQualityToast = (spreadId: string): void => {
const dispatch = useDispatch();
const [qualityToastIsShown, setQualityToastWasShown] = useState(false); // my approach
const poorQualityContentIds = useSelector(
(state: AppState) =>
spreadWithImageContentsSelector(state, spreadId).filter((contentId) => {
const qualityInformation = productImageQualitySelector(state, contentId);
return qualityInformation !== undefined && qualityInformation.hasPoorQuality
}),
shallowEqual
);
useEffect(() => {
const imageQualityWarningToast: ClosableToast = {
mode: ToastMode.CLOSABLE,
text: locale.photoQualityWarning.toast,
severity: ToastSeverity.WARN,
closable: false,
};
if (poorQualityContentIds.length > 0 && qualityToastIsShown === false) {
dispatch(showToast(ToastType.NONE, imageQualityWarningToast));
setQualityToastWasShown(!qualityToastIsShown); // my approach
}
}, [dispatch, poorQualityContentIds, qualityToastIsShown]);
};
我以前研究过这类问题,但我认为这不是最理想的 因此,我所做的不是只存储一个布尔值,而是存储每个图像的图像id或一些引用,然后检查存储在该图像id内的布尔值。这样,每次只为一个特定图像设置标志,并且只检查该标志 因此,在您所在的州存储类似的内容:
{
image1: { warningShown: true },
image2: { warningShown: false }
}