错误:动作必须是普通对象。使用自定义中间件进行异步操作。 (React Native)

时间:2019-12-16 18:51:31

标签: react-native redux react-redux redux-thunk

我正在尝试这样做,以便如果未将名为code的项目设置为带有redux的状态,则将从AsyncStorage对其进行调用并设置状态。

import {AsyncStorage} from 'react-native'
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux'
import {handlePhoneNumber, saveCode} from './../../actions/RegistrationActions';

class EnterPhoneNumberScreen extends React.Component {
  componentDidMount() {
    let code = this.props.registration.code;
    console.log("code is", code);
    if(code){
      // Do nothing
    }else{
      console.log("in the else");
      this.props.getAndSetCode();
    }
  }
}

const getAndSetCode = () => dispatch => {
  console.log("in get and set Code");
  AsyncStorage.getItem('code')
    .then((data) => {
       console.log("data is ", data);
       dispatch(saveCode(data));
       console.log("in getAndSetCode method, Code is ", data);
    })
}


const mapDispatchToProps = dispatch => (
  bindActionCreators({
    handlePhoneNumber,
    getAndSetCode: () => dispatch(getAndSetCode()),
  }, dispatch)
);

export default connect(mapStateToProps, mapDispatchToProps)(EnterPhoneNumberScreen);

控制台输出以下内容:

 LOG  code is null
 LOG  in the else
 LOG  in get and set Code
 LOG  data is  3tgvgq
 LOG  in getAndSetCode method, Code is  3tgvgq

我知道thunk已正确安装,因为它正在应用程序的其他位置运行。 saveCode只是正常动作:

export const saveCode = code => ({
    type: "SAVE_CODE",
    payload: code
})

此错误出现在iphone11模拟器中:

enter image description here

我该如何解决?

0 个答案:

没有答案