Reactjs 无法在connect react redux和mapDispatchToProps之后调用操作

Reactjs 无法在connect react redux和mapDispatchToProps之后调用操作,reactjs,redux,Reactjs,Redux,将组件连接到redux存储后,我无法调用容器中的操作 我的容器: import React, { Component } from 'react'; import * as actions from '../actions'; import { connect } from 'react-redux'; class CommentBox extends Component { constructor(props) { super(props); thi

将组件连接到redux存储后,我无法调用容器中的操作

我的容器:

import React, { Component } from 'react';
import * as actions from '../actions';
import { connect } from 'react-redux';

class CommentBox extends Component {
    constructor(props) {
        super(props);

        this.state = { comment: '' };
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        this.setState({ comment: event.target.value });
    }

    handleSubmit(event) {
        event.preventDefault();

        this.props.actions.saveComment(this.state.comment);
        this.setState({ comment: '' });
    }

    render() {
        return (
            <form
                onSubmit={this.handleSubmit}
                className="comment-box">
                <textarea
                    value={this.state.comment}
                    onChange={this.handleChange.bind(this)}/>
                <button action="submit">Submit Comment</button>
            </form>
        );
    }
}

const Container = connect(null, actions)(CommentBox);

export default Container;
我需要映射任何动作。我怎样才能解决它?多谢各位

编辑: 这是我的行动

import SAVE_COMMENT from './types';

export default function saveComment(comment) {
    return {
        type: SAVE_COMMENT,
        payload: comment
    };
};
我还发现我将action creator导出为默认值。因此,当我使用
import*作为操作导入它时,我有一个对象

{ default: function saveComment() }

它使mapDispatchToProps将默认属性映射到容器的道具。为了解决这个问题,我只需在导出saveComment时删除
default
,它就可以正常工作了。谢谢大家

因为您正在导入操作,就像这里所做的那样,
import*as actions from'../actions'
,您应该能够通过执行
actions.saveComment(this.state.comment)访问您的操作handleSubmit()

中进行代码>导入,因为您正在导入操作,就像这里所做的那样,
import*作为来自“../actions”的操作
,您应该能够通过执行
actions.saveComment(this.state.comment)访问您的操作handleSubmit()

中使用code>,这不是在组件中使用操作的正确方法。您必须确保操作包装在分派方法中。在您的情况下,我将创建另一个函数mapDispatchToProps并使用它。请参见下面的我的代码:

import React,{Component}来自'React';
将*作为动作从“../actions”导入;
从“redux”导入{bindActionCreators};
从'react redux'导入{connect};
类CommentBox扩展组件{
建造师(道具){
超级(道具);
this.state={注释:'};
this.handleSubmit=this.handleSubmit.bind(this);
}
手变(活动){
this.setState({comment:event.target.value});
}
handleSubmit(事件){
event.preventDefault();
this.props.actions.saveComment(this.state.comment);
this.setState({注释:'});
}
render(){
返回(
提交评论
);
}
}
//在这里使用bindActionCreators
const mapDispatchToProps=调度=>({
操作:bindActionCreators(操作、调度),
})
const Container=connect(null,mapDispatchToProps)(CommentBox);
导出默认容器;

这不是在组件中使用操作的正确方法。您必须确保操作包装在分派方法中。在您的情况下,我将创建另一个函数mapDispatchToProps并使用它。请参见下面的我的代码:

import React,{Component}来自'React';
将*作为动作从“../actions”导入;
从“redux”导入{bindActionCreators};
从'react redux'导入{connect};
类CommentBox扩展组件{
建造师(道具){
超级(道具);
this.state={注释:'};
this.handleSubmit=this.handleSubmit.bind(this);
}
手变(活动){
this.setState({comment:event.target.value});
}
handleSubmit(事件){
event.preventDefault();
this.props.actions.saveComment(this.state.comment);
this.setState({注释:'});
}
render(){
返回(
提交评论
);
}
}
//在这里使用bindActionCreators
const mapDispatchToProps=调度=>({
操作:bindActionCreators(操作、调度),
})
const Container=connect(null,mapDispatchToProps)(CommentBox);
导出默认容器;

我试过了,但没有任何改变。仍然存在问题当我将saveComment action creator导出为默认值时,这是我的错误。但是,我直接将操作传递给connect()助手的方式仍然有效。@mhdev真的吗?你真的能确认减速机正在执行你的操作吗?@D-reaper当然,我在react-redux api doc@mhdev中找到了它是的,特别是在这里:。因此,你所做的是不可能是正确的,因为你必须将你的动作创建者包装在一个调度中。仍然存在问题当我将saveComment action creator导出为默认值时,这是我的错误。但是,我直接将操作传递给connect()助手的方式仍然有效。@mhdev真的吗?你真的能确认减速机正在执行你的操作吗?@D-reaper当然,我在react-redux api doc@mhdev中找到了它是的,特别是在这里:。因此,您所做的事情不可能是正确的,因为您必须将您的操作创建者打包在一份调度中。您可以向我们展示您的操作吗?您可以向我们展示您的操作吗?这是错误的<代码>连接
不将操作作为参数。它需要
mapStateToProps
mapDispatchToProps
,两者都可以是空值。如果两者都是空值,则会使
分派
在连接的组件中作为道具可用,并且不会将组件连接到存储。这是不正确的<代码>连接
不将操作作为参数。它需要
mapStateToProps
mapDispatchToProps
,两者都可以是空值。如果两者都是空值,则会使
分派
在连接的组件中作为道具可用,而不会将组件连接到存储。
import SAVE_COMMENT from './types';

export default function saveComment(comment) {
    return {
        type: SAVE_COMMENT,
        payload: comment
    };
};
{ default: function saveComment() }