简体   繁体   English

Redux-thunk与redux-form-不分派

[英]Redux-thunk with redux-form - not dispatching

Long post below, but not complicated! 下面的帖子很长,但并不复杂! I have setup my form: 我已经设置好表格:

NewCommentForm Component NewCommentForm组件

class NewCommentForm extends Component {
    render() {
        const { handleSubmit } = this.props;
        return (
            <form onSubmit={handleSubmit}>
                <Field component="input" type="text" name="title"/>
                <Field component="textarea" type="text" name="content"/>
            </form>
        )
    }
}
const mapStateToProps = (state) => ({})
// Actions are imported as 'import * as action from '../actions/comments'
NewCommentForm = connect(mapStateToProps, actions)(NewCommentForm)

NewCommentForm = reduxForm({
    form: 'newComment',
    onSubmit: actions.postComment // This is the problem!
})(NewCommentForm);

RemoteSubmitButton Component RemoteSubmitButton组件

class RemoteSubmitButton extends Component {
    render() {
        const { dispatch } = this.props;
        return (
          <button
            type="button"
            onClick={() => dispatch(submit('newComment'))}>Submit</button>
      )
    }
}
RemoteSubmitButton = connect()(RemoteSubmitButton);

Everything wrapped in NewComment Component : 一切都包裹在NewComment组件中

class NewComment extends Component {
    render() {
        return (
                <div className="new-comment">
                    <NewCommentForm />
                    <RemoteSubmitButton />
                </div>
        )
    }
}

The problem is with the postComment function: 问题出在postComment函数上:

export const postComment = (comment) => {
    console.log("Post comment - first;") // THIS ONE GETS CALLED
    return (dispatch) => {
        console.log("Post comment - second"); // THIS ONE IS NEVER CALLED
        return api.postComment(comment).then(response => {
            dispatch({
                type: 'POST_COMMENT_SUCCESS',
                response
            });
        });
    }
}

that gets its api.postComment from another file: 从另一个文件获取其api.postComment

export const postComment = (comment) => {
    return axios.post(post_comment_url, {
        comment
    }).then(response => {
        return response;
    });
}

I have redux-thunk setup in my store: 我的商店中有redux-thunk设置:

import thunk from 'redux-thunk';
const configureStore = (railsProps) => {
    const middlewares = [thunk];
  const store = createStore(
    reducers,
    railsProps,
    applyMiddleware(...middlewares)
  );
  return store;
};

Why after submitting the form using the RemoteSubmitButton the second part of the postComment function is never called? 为什么在使用RemoteSubmitButton提交表单之后,永远不会调用postComment函数的第二部分? What did I do wrong? 我做错了什么?

The problem is because you are trying to use the action that is not connected with the react-redux connect . 问题是因为您尝试使用未与react-redux connect You have to use it inside the component that is connected to the redux. 您必须在连接到redux的组件中使用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM