Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Formik表单仅在第二次单击时更新状态_Reactjs_Forms_React Native_Formik - Fatal编程技术网

Reactjs Formik表单仅在第二次单击时更新状态

Reactjs Formik表单仅在第二次单击时更新状态,reactjs,forms,react-native,formik,Reactjs,Forms,React Native,Formik,我正在尝试使用Formik制作一个签出表单,但是当我单击submit按钮并将数据记录到控制台时,直到第二次单击,我才看到任何更改 onSubmit={(values) => { addData(values); console.log(data); }}> 此外,当我去更改数据时(我的表单在提交时不会重置),我仍然会看到旧数据,并且它不会更新。我刚刚传递了它,我可以解决它 它似乎只是在下一次单击时渲染,然后更新

我正在尝试使用Formik制作一个签出表单,但是当我单击submit按钮并将数据记录到控制台时,直到第二次单击,我才看到任何更改

        onSubmit={(values) => {
          addData(values);
          console.log(data);
        }}>

此外,当我去更改数据时(我的表单在提交时不会重置),我仍然会看到旧数据,并且它不会更新。

我刚刚传递了它,我可以解决它

它似乎只是在下一次单击时渲染,然后更新

为了解决这个问题,请尝试React-useEffect挂钩。这是我的React-Native示例

import React, { useState, useEffect } from 'react';
import { View, TextInput, Button } from 'react-native';

import { Formik } from 'formik';


export const FormikPub = (props) => {

  const [formikPub, setFormikPub] = useState(
    {foo: '', bar:''}
  )

  useEffect(() => {
    console.log(`After setFormikPub(): ${JSON.stringify(formikPub)}`)
  }, [formikPub]);
 
  return (
    <Formik
      initialValues={{ foo: '', bar: '' }}
      onSubmit={(values) => {
        setFormikPub(values)
      }}
      >
      {({ handleChange, handleBlur, handleSubmit, values }) => (
        <View>
          <TextInput
              name='foo'
              placeholder="Foo"
              onChangeText={handleChange('foo')}
              onBlur={handleBlur('foo')}
              value={values.foo}
          />
          <TextInput
              name='bar'
              placeholder="Bar"
              onChangeText={handleChange('bar')}
              onBlur={handleBlur('bar')}
              value={values.bar}
          />
          
          <Button color="#004686" onPress={handleSubmit} title="Publish Formik" />
        </View>
      )}
    </Formik>
  );
}
import React,{useState,useffect}来自“React”;
从“react native”导入{View,TextInput,Button};
从'Formik'导入{Formik};
导出常量FormikPub=(道具)=>{
常量[formikPub,setFormikPub]=useState(
{foo:'',条:'}
)
useffect(()=>{
log(`After setFormikPub():${JSON.stringify(formikPub)}`)
},[formikPub]);
返回(
{
setFormikPub(值)
}}
>
{({handleChange,handleBlur,handleSubmit,values})=>(
)}
);
}
它可能可以让您按下按钮,并且仅当您更改文本输入时,它才会运行

import React, { useState, useEffect } from 'react';
import { View, TextInput, Button } from 'react-native';

import { Formik } from 'formik';


export const FormikPub = (props) => {

  const [formikPub, setFormikPub] = useState(
    {foo: '', bar:''}
  )

  useEffect(() => {
    console.log(`After setFormikPub(): ${JSON.stringify(formikPub)}`)
  }, [formikPub]);
 
  return (
    <Formik
      initialValues={{ foo: '', bar: '' }}
      onSubmit={(values) => {
        setFormikPub(values)
      }}
      >
      {({ handleChange, handleBlur, handleSubmit, values }) => (
        <View>
          <TextInput
              name='foo'
              placeholder="Foo"
              onChangeText={handleChange('foo')}
              onBlur={handleBlur('foo')}
              value={values.foo}
          />
          <TextInput
              name='bar'
              placeholder="Bar"
              onChangeText={handleChange('bar')}
              onBlur={handleBlur('bar')}
              value={values.bar}
          />
          
          <Button color="#004686" onPress={handleSubmit} title="Publish Formik" />
        </View>
      )}
    </Formik>
  );
}