尝试在单击按钮时切换Redux布尔值,但是切换只在第一次时有效,我不知道为什么

lztngnrs  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(129)

我有一个非常简单的redux切片,它有两个reducer,用来切换boolean的on或off,还有一个钩子内的函数,用来根据当前forceNativeActivities的状态调度这些动作。默认情况下,forceNativeActivitiesfalse,所以第一次点击应该会把forceNativeActivities变成true
当我第一次单击该按钮时,调度了toggleForceNativeActivitiesOn,它将forceNativeActivities更改为true,这正是我所期望的。
问题是,如果我再次单击该按钮,我希望toggleForceNativeActivitiesOff会被调度,因为forceNativeActivitiestrue,并将forceNativeActivities更改为false,但这种情况不再发生,只有第一次切换有效。

import { createSlice } from '@reduxjs/toolkit';

export type ActivityState = {
    forceNativeActivities: boolean;
};

const initialState: ActivityState = {
    forceNativeActivities: false,
};

export const activitySlice = createSlice({
    name: 'activity',
    initialState,
    reducers: {
        toggleForceNativeActivitiesOn: (state) => {
            state.forceNativeActivities = true;
        },
        toggleForceNativeActivitiesOff: (state) => {
            state.forceNativeActivities = false;
        },
    },
});

export const { actions: activityActions, reducer: activityReducer } = activitySlice;

按钮单击时调用的函数:

const toggleForceNativeActivities = () => {
    forceNativeActivities ? dispatch(toggleForceNativeActivitiesOff()) : dispatch(toggleForceNativeActivitiesOn());
    setItem(PERSISTED_FORCED_ACTIVITY_KEY, forceNativeActivities.toString());
};
smdncfj3

smdncfj31#

尝试

const toggleForceNativeActivities = useCallback(() => {
    forceNativeActivities ? dispatch(toggleForceNativeActivitiesOff()) : dispatch(toggleForceNativeActivitiesOn());
    setItem(PERSISTED_FORCED_ACTIVITY_KEY, forceNativeActivities.toString());
}, [forceNativeActivities]);

您的行程常式正在使用不含useCallback的过时值。

相关问题