Reactjs Redux:如何只发送一次useEffect中的操作?

Reactjs Redux:如何只发送一次useEffect中的操作?,reactjs,redux,Reactjs,Redux,我有一个日历应用程序,用户可以为每个日历页面上传1-4个图像 预期结果: 当用户上传一个质量不好的图像时,我有一个质量警告,应该为每个图像显示一次 当前结果: 现在,useffect中的动作showtoos被多次触发。因此,例如,当我上传一个新图像时,删除另一个图像,等等。每次再次触发此质量警告时 我的方法: 我试图实现一个本地状态,以便切换布尔值(如果警告显示一次,则设置为false)。但我只能让它适用于所有图像(只要任何图像质量不好,本地状态就设置为false)。但我需要它是图像特定的 如果

我有一个日历应用程序,用户可以为每个日历页面上传1-4个图像

预期结果: 当用户上传一个质量不好的图像时,我有一个质量警告,应该为每个图像显示一次

当前结果: 现在,
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 }
}