首页 > 解决方案 > 错误:操作必须是普通对象。使用自定义中间件进行异步操作。(反应原生)

问题描述

我正在努力做到这一点,如果一个被调用的项目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模拟器中:

在此处输入图像描述

我该如何解决?

标签: react-nativereduxreact-reduxredux-thunk

解决方案


推荐阅读