动作必须是普通对象。使用自定义中间件实现异步功能。反应原生

时间:2017-09-13 13:07:28

标签: react-native async-await react-redux expo

我从我的组件调用 getLocalToken 操作,该操作从 AsyncStorage 中读取字符串。以下是我如何调用该函数。

componentWillMount() {
            this.props.getLocalToken();
            console.log("CWM", this.props.auth);
        }

以下是我的行动

export const getLocalToken = async () => {
    try {
        const localToken = await AsyncStorage.getItem('@auth:localToken');
        const mobileNumber = await AsyncStorage.getItem('@auth:mobileNumber');
    }
    catch (e) {
        console.log('Failed to read token', e);
    }



    return (dispatch) => {
        console.log("get token");
        dispatch({
            type: types.GET_LOCALTOKEN_SUCCESS,
            payload: { localToken: this.localToken, mobileNumber: this.mobileNumber }
        });
    }
}

对于这段代码,我得到 Action必须是普通对象。使用自定义中间件进行异步功能。错误。

1 个答案:

答案 0 :(得分:2)

Actions是纯JavaScript对象。操作必须具有指示正在执行的操作类型的type属性。通常应将类型定义为字符串常量。有关更多信息,请阅读redux-documentation。

如果您想要异步请求或其他副作用,则必须使用middleware。最受欢迎的是:

所有这些都以不同的方式处理异步请求。 Redux-thunk对初学者友好,但在我看来,对复杂的项目和测试感到痛苦。