reactjs - 在Formik React表单的handleSubmit方法中设置Redux State

标签 reactjs react-redux formik

我想在提交 Formik react 表单后通过 Ajax 获取的 redux 存储中设置一个变量

import React from 'react';
import {connect} from 'react-redux';
import { withFormik, Form, Field } from 'formik';

const LoginForm = ({
    values
  }) => {

  return (
        <div>
            <Form className={styles.LoginForm}>
              <Field className={input_classes} type="text" name="username" placeholder="username" />
              <Field className={input_classes} type="password" name="password" placeholder="password" />
              <button>Submit</button>
            </Form>
        </div>
    )

}

const mapDispatchToProps = dispatch => {
  return {
    setData: (data) => dispatch({type: actionTypes.ADD_DATA, data: data})
  }
}

const loginForm = connect(null, mapDispatchToProps)(LoginForm);

const FormikLoginForm = withFormik({
  mapPropsToValues({ username, password }) {
    return {
      username: username || '',
      password: password || '',
    }
  },
  handleSubmit(values, props) {
    //make AJAX call and set data in redux store
  }
})(loginForm);

export default FormikLoginForm;

我找不到在handleSubmit方法中将任何数据设置到存储的方法;也就是说,如何访问返回的 mapDispatchToProps 的 setData 方法?

最佳答案

HOC 的顺序很重要,尤其是在这种情况下(访问另一个 HOC 中的 prop) - redux connect 必须位于 withFormik 的外部。

const FormikLoginForm = withFormik({
  mapPropsToValues({ username, password }) {
    return {
      username: username || '',
      password: password || '',
    }
  },
  handleSubmit(values, { props } ) {
    //make AJAX call and set data in redux store
    props.setData( result )
  }
})(LoginForm);

export default connect(null, mapDispatchToProps)(FormikLoginForm);

关于reactjs - 在Formik React表单的handleSubmit方法中设置Redux State,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56136828/

相关文章:

reactjs - 测试时如何在我的组件之外设置 Formik isSubmitting?

javascript - Electron webview 仅预加载文件 ://protocol is supported when using create-react-app base

javascript - React.js - 根据门拼图答案更改图像

javascript - 类型 '(event: FormEvent<HTMLInputElement>) => void' 不可分配给类型 '() => any'

react-native - 如何调用 Actions.pop() 并刷新之前的场景? React Native、Redux、React-Native-Router-Flux

javascript - 当我使用 REACT/REDUX 创建新帖子时,API 会刷新并且之后不允许新帖子

javascript - 是的,数组验证 - 仅当数组长度大于 1 时才需要值

javascript - 是的,基于父对象模式的条件验证

javascript - 在 react-admin 中为 View 定义一个可重用的模板

javascript - React - 禁用按钮单击行