我是一名javascript/redux/react初学者,使用redux、react-redux和&react 由于某种原因,在将mapDispatchToProps函数与connect(react-redux绑定)结合使用时,我收到一个类型错误,表明在我try 执行生成的prop时,dispatch不是一个函数.但是,当我将dispatch作为一个props 调用时(请参阅提供的代码中的setAddr函数),它可以工作.

我很好奇为什么会这样,在redux文档中的TODO应用程序示例中,mapDispatchToProps方法的设置方式是相同的.当我安慰的时候.日志(log)(dispatch)在函数中表示dispatch是object类型.我可以继续以这种方式使用dispatch,但在我继续使用redux之前,如果知道为什么会发生这种情况,我会感觉更好.我正在使用带有babel加载程序的webpack进行编译.

我的代码:

import React, { PropTypes, Component } from 'react';
import { connect } from 'react-redux';
import { setAddresses } from '../actions.js';
import GeoCode from './geoCode.js';
import FlatButton from 'material-ui/lib/flat-button';

const Start = React.createClass({
    propTypes: {
        onSubmit: PropTypes.func.isRequired
    },

    setAddr: function(){
        this.props.dispatch(
            setAddresses({
                pickup: this.refs.pickup.state.address,
                dropoff: this.refs.dropoff.state.address
            })
        )   

    },

    render: function() {
        return (
            <div>
                <div className="row">
                    <div className="col-xs-6">
                        <GeoCode ref='pickup' />
                    </div>
                    <div className="col-xs-6">
                        <GeoCode ref='dropoff' />
                    </div>
                </div>
                <div className="row">
                    <div className="col-xs-6">
                        <FlatButton 
                            label='Does Not Work'
                            onClick={this.props.onSubmit({
                                pickup: this.refs.pickup.state.address,
                                dropoff: this.refs.dropoff.state.address
                            })} 
                            />
                    </div>
                    <div className="col-xs-6">
                        <FlatButton 
                            label='Works'
                            onClick={this.setAddr} 
                            />
                    </div>
                </div>
            </div>
        );
    }
})

const mapDispatchToProps = (dispatch) => {
    return {
        onSubmit: (data) => {
            dispatch(setAddresses(data))
        }
    }
}

const StartContainer = connect(mapDispatchToProps)(Start)

export default StartContainer

干杯

推荐答案

如果你想使用mapDispatchToProps而不是mapStateToProps,那么第一个参数就使用null.

export default connect(null, mapDispatchToProps)(Start)

Reactjs相关问答推荐

在react中向数组状态添加值时出错

Redux Provider Stuck甚至彻底遵循了文档

如何在与AntD的react 中限制文件上传和显示消息?

在url中使用MongoDB对象ID被认为是不好的做法?

使用Next.js和Next-intl重写区域设置

根据处于react 状态的数组的名称键,将新对象添加到嵌套的对象数组中

为 Next.js 应用程序目录中的所有页面添加逻辑的全局文件是什么?

无法读取未定义的属性(读取值)...TypeError:无法读取未定义的属性(读取值)

使用 map 循环浏览列表列表中的列表并显示它们

MUI TextField Select 菜单的最大高度

当 React 中的状态发生变化时如何停止重新加载谷歌 map ?

Select 项目后 Select HeadlessUI 组合框中的所有文本?

条件渲染元素的测试不起作用

如何禁用 redux-toolkit 的不可序列化值测试警告?

如何在 React 中使用 debounce hooks

Cypress ,重试不再附加到 DOM 的元素

React Router v6 - 访问嵌套路由和处理手写 url 的正确方法

如何根据数据库中的值设置单选按钮选中? - react

从输入中获取数字时,react 计数器不会增加

gtag:为什么谷歌分析即使没有被授权也会收集数据