首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mapDispatchToProps

如何使用mapDispatchToProps
EN

Stack Overflow用户
提问于 2019-03-26 14:31:42
回答 3查看 370关注 0票数 2

我正在学习Redux React。如何使用mapDispatchToProps?我的代码如下所示

代码语言:javascript
复制
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { getAddress } from '../store/actions/addressActions';

class Dashboard extends Component {
    componentDidMount = () => {
        this.props.getAddress();
    };

    render() {
        return <div>Hello { console.log(this.props) } </div>;
    }
}

const mapStateToProps = state => ({
    address: state.address
});

const mapDispatchToProps = dispatch => ({
    getAddress
});

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

我得到如下所示的控制台输出

我在哪里做错了?如何正确使用mapDispatchToProps?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-26 14:40:51

您可以将mapDispatchToProps定义为object,也可以从mapDispatchToProps返回调度的函数而不是对象

使用第一种方法,您的mapStateToProps将如下所示

代码语言:javascript
复制
const mapDispatchToProps = {
    getAddress
};

使用第二种方法,它将如下所示

代码语言:javascript
复制
const mapDispatchToProps = dispatch => ({
    getAddress: (...args) => dispatch(getAddress(...args));
});

另外,由于您使用的是combineReducers,因此需要更改在mapStateToProps中访问状态的方式

代码语言:javascript
复制
const mapStateToProps = state => ({ address: state.addressReducer.address });
票数 1
EN

Stack Overflow用户

发布于 2019-03-26 14:46:41

我认为,最初在store中,addressundefined。对,是这样?getAddress操作将设置地址值。

这是您遗漏的内容,1)您已经调度了操作。您可以使用以下任一方法

代码语言:javascript
复制
const mapDispatchToProps = dispatch => ({
    getAddress: (...args) => dispatch(getAddress(...args));
});

代码语言:javascript
复制
import { bindActionCreators } from "redux";

    const mapDispatchToProps = dispatch => bindActionCreators({getAddress}, dispatch)
票数 1
EN

Stack Overflow用户

发布于 2019-03-26 14:51:36

您应该稍微更新一下mapDispatchToProps方法。此外,您应该将其导出到编写测试。

代码语言:javascript
复制
import { bindActionCreators } from 'redux';

export const mapDispatchToProps = dispatch => ({
  actions: bindActionCreators(
    getAddress,
    dispatch,
  ),
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55351040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档