【问题标题】:How to pass state values to initial values in formik in react jsreactjs - 如何在formik中将状态值传递给初始值
【发布时间】:2019-05-24 00:18:01
【问题描述】:

我在我的反应应用程序中使用 formik 库。最初,我在构造函数中声明了状态值,在 componentDidMount 中我正在调用一个 API,该应用程序响应正在更新状态值,任何人都可以帮助我将状态值传递给 fomik 初始值

在我的情况下,formik 采用在构造函数中声明的初始状态值。提前感谢

class Dropdown extends Component {

        constructor(props) {
            super(props);
            this.state = {
              //some data
            };
          }
          componentDidMount() {
           //api call
           this.setState( {
              //update state values with api response data
            });  
         }
       render() {
            return (
            <Formik
              initialValues={this.state}
              validate={validate(validationSchema)}
              onSubmit={onSubmit}
              render={
                ({
                  values,
                  errors,
                  touched,
                  status,
                  dirty,
                  handleChange,
                  handleBlur,
                  handleSubmit,
                  isSubmitting,
                  isValid,
                  handleReset,
                  setTouched
                }) => ( 
                 //form uses initialValues
              )} />
              )
            }
    }

【问题讨论】:

    标签: reactjs jsx formik


    【解决方案1】:

    感谢 Abhiram,但如果您已更新到钩子:

    useFormik({
      initialValues: initialData,
      enableReinitialize: true,
      onSubmit: values => {
        // Do something
      }
    });
    

    【讨论】:

    • 谢谢老兄。 enableReinitialize 节省了一天。
    • 上帝保佑你!!!
    【解决方案2】:

    您可以在 initialValues 属性中强制设置每个值:

     <Formik
      initialValues={
        formValue1: this.state.value1,
        formValue2: this.state.value2,
        ...
      }
      validate={validate(validationSchema)}
      onSubmit={onSubmit}
      render={
        ({
          values,
          errors,
          touched,
          status,
          dirty,
          handleChange,
          handleBlur,
          handleSubmit,
          isSubmitting,
          isValid,
          handleReset,
          setTouched
        }) => ( 
             //form uses initialValues
        )
      } 
    />
    

    【讨论】:

      【解决方案3】:

      将 enableReinitialize 添加到 formik 解决了我的问题

           <Formik
                enableReinitialize
                ..
                render={
                  ({
                    ..
                  }) => ( 
                   //form uses initialValues
                )} />
      

      【讨论】:

        猜你喜欢
        • 2017-08-07
        • 2021-01-03
        • 1970-01-01
        • 2020-08-26
        • 1970-01-01
        • 1970-01-01
        • 2019-12-05
        • 2017-12-21
        • 2015-03-11
        相关资源
        最近更新 更多