Connect()中的mapDispatchToProps()必须返回一个普通对象

时间:2017-09-18 14:53:51

标签: reactjs react-native react-redux

这是LoginScreenContainer.js

translate

这是actions / auth.js

import React from 'react'
import { connect } from 'react-redux'
import LoginScreen from '../components/LoginScreen.js'
import * as AUTH_ACTIONS from '../actions/auth.js'

const mapStateToProps = state => ({
    loggedIn: state.AUTH.loggedIn
})

const mapDispatchToProps = (dispatch) => {
    loginDefault: (username , password) => {
        dispatch(AUTH_ACTIONS.actions.loginDefault(username, password))
    }
}


export default connect(mapStateToProps, mapDispatchToProps)(LoginScreen)

调试此方法的最佳方法是什么。 我无法弄清楚哪个部分出了问题。 我一直在想这3天。 需要指导和帮助。 谢谢。

(我很反应)

2 个答案:

答案 0 :(得分:4)

您的调度缺少返回值,您应该将其更改为

const mapDispatchToProps = (dispatch) => ( { // <- forgot the wrapping with ( here
    loginDefault: (username , password) => {
        dispatch(AUTH_ACTIONS.actions.loginDefault(username, password))
    }
} ) // <- forgot closing of the wrapping with ) here 

这是由于箭头功能的性质,你似乎正确地做了道具的状态,所以我认为这是一个小的疏忽。

所以,箭头函数有这个

const sample = argument => { return { test: '1' } }

等于

const sample = argument => ( { test: '1' } );

但不是

const sample = argument => { test: '1' };

因此,如果您使用箭头函数,并且希望返回一个对象,则应该返回它,或者用( )括号

包装它。

答案 1 :(得分:1)

我可能错了,但我认为mapDispatchToProps不正确:

const mapDispatchToProps = () => ({
  loginDefault: AUTH_ACTIONS.actions.loginDefault,
})

然后在你的事件处理程序中:

this.props.loginDefault(username, password)