使用react和redux在我的函数中没有定义dispatch

时间:2017-09-01 07:10:32

标签: reactjs redux redux-thunk redux-middleware

我正在尝试使用react-redux-loading-bar在从API服务器获取数据时显示加载栏,我不使用promise中间件,所以我决定不使用它,示例说这样做

import { showLoading, hideLoading } from 'react-redux-loading-bar'

dispatch(showLoading())
// do long running stuff
dispatch(hideLoading())

它给了我这个。

Uncaught ReferenceError: dispatch is not defined

我和其他图书馆有类似的问题并且放弃了那个时间,这次我想真正了解它是如何工作的,所以任何信息都非常感谢。下面是导致错误,speicifc函数和类名剥离的代码。

import React from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'

import { showLoading, hideLoading } from 'react-redux-loading-bar'


import * as xxxxxActions from '../../actions/xxxxx'


class xxxxxx extends React.Component {

    constructor(props) {
        super(props)

        this.handleclick = this.handleclick.bind(this)
    }

    handleclick(){
        dispatch(showLoading())
        asynchronousGetFunction( target_url, function (data) {
            dispatch(hideLoading())
        })
    }

    render() {

        return  <li onClick={this.handleclick}>yyyyyyy</li>
    }
}

function mapStateToProps( state ){
    return {
    }
}

function mapDispatchToProps(dispatch, state) {

    return {
        xxxxxActions: bindActionCreators( xxxxxActions, dispatch )
    };
}

export default connect(
    mapStateToProps,
    mapDispatchToProps
)(xxxxxx)

3 个答案:

答案 0 :(得分:1)

您需要将调度功能传递给道具:

function mapDispatchToProps(dispatch, state) {
    return { 
        xxxxxActions: ....,
        showLoading: function () {
            dispatch(showLoading());
        },
        hideLoading: function () {
            dispatch(hideLoading());
        },
    };
}

然后,在您的组件中使用它:

this.props.showLoading();
...
this.props.hideLoading();

答案 1 :(得分:1)

connect您的组件后,dispatch成为prop。这同样适用于xxxxxActions ...

在这种情况下,句柄将是:

handleclick(){
  this.props.dispatch(...)
}

答案 2 :(得分:0)

您不需要使用&#34;发送&#34;在组件中。使用mapDispatchToProps中的dispatch绑定您的函数。

了解有关mapDispatchToProps的更多信息。