1

我收到以下错误:

'dispatch' 未定义 no-undef

我想要做的是,只要用户选择 ReduxFormField 单选按钮之一,表单就会自动提交。

能够做到这一点的正确方法是什么..从 onReduxFormFieldChange 调度?

...
import {
  Field as ReduxFormField,
  reduxForm,
} from 'redux-form';
import { compose } from 'recompose';
...

class MyFormRadioInputs extends React.Component {
  onReduxFormFieldChange = (e, newValue, previousValue) => {
  if (newValue) {
    dispatch(submit(MYFORM));
  }

  render() {
    const { MyItems } = this.props;
    return MyItems.map((item) => (
        <ReduxFormField
          key={item.id}
          name="MyItemId"
          type="radio"
          value={item.id}
          label={item.title}
          onChange={this.onReduxFormFieldChange}
        />
    ));
  }

}

const withForm = compose(
  reduxForm({
    form: MYFORM,
    ...
  })
);

const MyForm = (props) => (
    <Form>
        <MyFormRadioInputs
          myItems={props.myItems}
        />
    </Form>
);

MyForm.propTypes = {
  myItems: PropTypes.shape....    
};

export default withForm(MyForm);
4

1 回答 1

1

您正在将您的组件连接到 redux-form,但您从未将您的组件连接到 redux 存储,这意味着您没有能力调度操作(包括 redux-form 操作,例如submit)。

我以前没有使用recompose过,所以我不确定您是否/如何通过它进行调度,但是使用标准的 react-redux,您需要在文件底部添加类似以下内容:

const mapDispatchToProps = dispatch => ({ submit: (formName) => dispatch(submit(formName))});

export default connect(null, mapDispatchToProps)(withForm(MyForm));

然后您的组件的onReduxFormFieldChange实现变为:

onReduxFormFieldChange  = (e, newValue, previousValue) => {
    if (newValue) {
        this.props.submit(MYFORM);
    }
}
于 2018-01-19T22:49:42.183 回答