Отправка Redux-Form вызывает Action Creator, но редуктор никогда не получает Action

В приведенном ниже примере я использую mapDispatchToProps для привязки события onSubmit к save() Action Creator. Это работает - save() Action Creator записывает сообщение в консоль.

Проблема в том, что он впоследствии не отправляет действие TEST_SAVE, т.е. редуктор никогда не получает действие типа TEST_SAVE.

У меня есть ванильная форма redux, работающая, как показано ниже, но я новичок в redux-form, и мне интересно, что я могу делать не так?

const reducers = {
  // ... your other reducers here ...
  form: formReducer.plugin({
    contact: (state, action) => {  
      switch(action.type) {
        case 'TEST_SAVE':
          return state;
        default:
          return state;
      }
    }
  })
};
const reducer = combineReducers(reducers);
const store = createStore(reducer);


function mapDispatchToProps(dispatch) {
  return {
    onSubmit: (val) => dispatch(actionCreators.save(val)),
  }
}

var actionCreators = {   
  save: (value) => {
    console.log('SAVE action done!');
    return {type: 'TEST_SAVE', value};
  }, 
};

const MyContactForm = connect(
  mapDispatchToProps
)(ContactForm)


<Provider store={store}>
    <MyContactForm />
</Provider>

Отрывок из класса ContactForm:

class ContactForm extends Component {

  render() {
    const { error, handleSubmit, pristine, reset, submitting } = this.props;

    return (
      <form
        onSubmit={handleSubmit}
        >

    ....

    )

  }
}

ContactForm = reduxForm({
  form: 'contact' 
})(ContactForm);

person markau    schedule 26.10.2016    source источник


Ответы (2)


const MyContactForm = connect(
  mapDispatchToProps
)(ContactForm)

Первый параметр connect() - это mapStateToProps, а не mapDispatchToProps. Должно быть:

const MyContactForm = connect(
  undefined, // <------------- mapStateToProps
  mapDispatchToProps
)(ContactForm)
person Erik R.    schedule 26.10.2016
comment
О, такая очевидная и простая вещь в ретроспективе. Спасибо, Эрик, определенно за ответ, а также за библиотеку! - person markau; 27.10.2016

Никогда не используйте break внутри редуктора. Всегда возвращайте объект состояния.

person David L. Walsh    schedule 26.10.2016