我的 redux dispatch 语句有什么问题?

What is wrong with my redux dispatch statement?

我正在从本地存储中获取数据,并想分派一个 redux 函数。 但是我认为这个动作不是在函数中调用try block

在redux中

export function testLogin(loginStatus) {
  return async dispatch => {
    try {
    alert('me here')
      dispatch({
        type: TEST_LOGIN_STATUS,
        payload: loginStatus,
      });
    } catch (error) {
      console.log('not logged in');
    }
  };
}

export const authReducer = (state = initialState, action) => {
  switch (action.type) {
    case LOGGED_IN:
      return {...state, token: action.payload, loggedIn: true};
    case TEST_LOGIN_STATUS:
      return {...state, loggedIn: action.payload};
    default:
      return state;
  }
};

如您所见,我正在获取 testLogin 操作函数的参数状态。

这是我在主页中所做的 screen.When 用户打开应用程序。我需要通过检查 local storage

来测试用户是否登录
useEffect(() => {
        async function getStorageValue() {
            let value;
            try {
                value = await AsyncStorage.getItem('isLoggedIn');
                if (value === 'true') {
                    dispatch(testLogin(true));
                } else {
                    dispatch(testLogin(false));
                }
            } catch (e) {
                // handle here
            } finally {
            }
        }
        getStorageValue();
    }, []);

因为 Async storage 只接受 strings 在测试值并返回 true 或 false。

即使我登录了也是如此。当我检查 redux loginStatus 我总是 logged out 。调度功能有什么问题吗?

看起来testLogin是一个高阶函数。即它 returns 一个接受 dispatch 作为参数的函数。

在您的 useEffect try 块中尝试以下操作:

testLogin(value === 'true')(dispatch)

(替换 if/else)

如果我错了请纠正我。但是您是否正确定位了 testLogin?

例如,我以前见过这个问题,人们只是忘记了正确定位操作。

例如一个名为 LoginActions 的对象。

const LoginActions = {... testLogin(loginStatus) { ...} }

然后在我要发送的代码中

import { LoginActions } from "../store/LoginActions" //<-- Import here

useEffect(() => {
    async function getStorageValue() {
        let value;
        try {
            value = await AsyncStorage.getItem('isLoggedIn');
            if (value === 'true') {
                dispatch(LoginActions.testLogin(true)) //<-- Dispatch here.
            } else {
                dispatch(LoginActions.testLogin(false));
            }
        } catch (e) {
            // handle here
        } finally {
        }
    }
    getStorageValue();
}, []);

再说一次,我可能误会了,但我只是想知道是不是这样?