动作必须是普通物体。使用自定义中间件进行异步功能。 React Native

问题描述:

我打电话给getLocalToken从我的组件读取字符串的操作从AsyncStorage。以下是我如何调用该函数。动作必须是普通物体。使用自定义中间件进行异步功能。 React Native

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 } 
     }); 
    } 
} 

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

+0

错误消息似乎很自我描述,什么似乎是问题? – Nit

+0

我无法弄清楚,因为我是Javascript和React Native的新手 –

+0

要更改错误消息,默认操作不支持异步操作。如果你想让你的动作异步,你将需要使用自定义中间件,一个常用的选项是[Redux Thunk](https://github.com/gaearon/redux-thunk)。 – Nit

Actions是纯JavaScript对象。操作必须具有指示正在执行的操作类型的类型属性。类型通常应该定义为字符串常量。请阅读redux文档以获取更多信息。

如果你想要一个异步请求或其他副作用,你必须使用middleware。最流行的是:

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