标签: formik

如何在formik中访问validationSchema内的值

仅当我使用验证但不在验证模式内时才可以访问值

<Formik
        initialValues={initialValues}
        validationSchema={validationSchema(values)}
        onSubmit={actions.handleSubmit}
      >
        <Form>
Run Code Online (Sandbox Code Playgroud)

如果我使用 useFormikContext(); 值在validationSchema内部不可访问,因为初始化发生在Formik之后。

如何解决这个问题呢。

formik

1
推荐指数
1
解决办法
4481
查看次数

Formik-如何从组件的道具设置输入字段值?

我正在使用Formik我的表格。
输入之一应该由props值填充。
我该怎么做?
这是我的方法:

<input
     type="text"
     id="country"
     readOnly
     value={props.countryCode}
     // {...formik.getFieldProps("country")}
 />    
Run Code Online (Sandbox Code Playgroud)

但它很可能会干扰Formik,这就是它不起作用的原因。
正确的解决方案是什么?

谢谢你!

reactjs formik

1
推荐指数
1
解决办法
7047
查看次数

ReactJS、Formik、Bootstrap Modal - 从模式按钮提交

我的 ReactJS App - CodeSandBox 链接中有以下结构。我试图通过使用 Bootstrap 模式窗口的按钮以某种方式提交 Formik 表单,但是我无法理解如何从树下的 2 个组件调用表单提交并将功能组合在一起。

有人可以建议这是否可以实现吗?

谢谢!

bootstrap-modal reactjs formik

1
推荐指数
1
解决办法
4007
查看次数

如何使用 formik 提交后或单击取消按钮后重置表单

const TextForm: React.FunctionComponent<Props> = (props) => { 

const formError = yup.object({
    name: yup.string().required("Required"),
  });
      const formValidation = (fieldName) => {
        return {
          invalid: !!form.errors[fieldName] && form.touched[fieldName],
          invalidText: form.errors[fieldName],
          onBlur: form.handleBlur,
        };
      };  
 const form = useFormik({
        initialValues: {
          name,
          id,
        },
        formValidation
        formError,
        validateOnChange: true,
        validateOnMount: true,
        initialTouched: {},
      });
  
    return(
    <React.Fragment>
    <form>
     <TextInput
                        id="text-input-2"
                        {...validation("name")}
                        type="text"
                        name = "name"
                        onChange={(event) => {
                          setName(event.target.value);
                          form.handleChange(event);
                        }}
                      />
    <TextInput
                        id="text-input-2"
                        {...validation("id")}
                        type="text"
                        name = "id"
                        onChange={(event) => {
                          setId(event.target.value);
                        }}
                      /> …
Run Code Online (Sandbox Code Playgroud)

javascript typescript reactjs formik

1
推荐指数
1
解决办法
9953
查看次数

如果处于编辑模式,则从状态中设置 Formik 中的initialVariables

我正在使用 Formik 来验证一些数据。当它应该创建新实体时它工作正常,但是当我想编辑实体时就会出现问题。

编辑模式必须从状态激活(this.state.edit === true),实体的数据也存储在状态上,例如 this.state.name 那里有一个字符串值。

我在渲染中放置了控制台日志,问题是日志被打印了几次,第一次在 this.sate.name 上使用空字符串,并且 this.state.edit 的值为 false。接下来打印它是正确的,此编辑为 true 并且名称包含一个值。

这是代码:

import React from 'react';
import { Redirect } from 'react-router-dom';
import { Formik, Form, Field } from 'formik';
import { Input, Button, Label, Grid } from 'semantic-ui-react';
import { connect } from 'react-redux';
import * as Yup from 'yup';
import { Creators } from '../../../actions';

class CreateCompanyForm extends React.PureComponent {
  constructor(props) {
    super(props);

    this.state = {
      name: '',
      redirectCreate: false,
      redirectEdit: false,
      edit: …
Run Code Online (Sandbox Code Playgroud)

javascript setstate reactjs yup formik

1
推荐指数
1
解决办法
2920
查看次数

Reactjs formik 从数组中删除项目

我的组件中有这些状态。

     const [initialValues, setInitialValues] = useState({
        name: "",
        name2: "",
        items: []
      });
Run Code Online (Sandbox Code Playgroud)

namename2组合在一起形成一个数组{name: 'sss', name2: 'sss'}并推送到该items数组。推动部分没问题。唯一的问题是谁删除该数组上的项目。

这是我的代码https://codesandbox.io/s/material-demo-forked-u2qzv?file=/demo.js:260-362

普通的数组方法在这里似乎不起作用。

如何修复 React 和 Formik?

javascript reactjs formik

1
推荐指数
1
解决办法
1万
查看次数

如何在 Formik 中使用数据列表输入?

我正在尝试在 ReactJS 中以 formik 形式使用 datalist。我正在尝试以 formik 形式在 datalist 选项中动态显示数组列表。所以,我做了如下:

<Formik
initialValues={initialValues}
validationSchema={AddEmployeeFormValidationSchema}
onSubmit={props.handleSubmitMethod}
>
{(formikProps) => (
  <Form onSubmit={formikProps.handleSubmit}>
  
    <div className="form-row">
      <Col>
        <FormGroup>
          <label>Designation</label>

          <Field
            type="text"
            name="designation"
            list="designations"
            id="designation"
        
          >
            <datalist id="designations">
              {props.designations.map((designation) => {
                return (
                  <option
                    value={`${designation.id}`}
                    key={`${designation.id}`}
                  >
                    {`${designation.designation_title}`}
                  </option>
                );
              })}
            </datalist>
         
          </Field>
          <ErrorMessage
            name="designation"
            component="div"
            className="text-danger"
          />
        </FormGroup>
      </Col>
     
    <div className="form-row mt-3 text-right">
      <Col>
        <Button
          className="primary-color"
          type="submit"
          disabled={!formikProps.dirty || formikProps.isSubmitting}
        >
          Submit
        </Button>
      </Col>
    </div>
  </Form>
)}
</Formik>
Run Code Online (Sandbox Code Playgroud)

但它向我显示以下错误:

Error: input is a void …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs html-datalist formik

1
推荐指数
1
解决办法
1117
查看次数

反应 formik 禁用具有表单有效性的提交按钮

我正在为我的 React 项目使用 formik 库。当必填字段为空或有任何错误时,我需要首先禁用提交按钮。我使用下面的代码检查了表单状态。

const formik = useFormik(false);

        <Formik
        initialValues={!location.state ? InvoiceInitalValues : location.state}
        validationSchema={POValidation} innerRef={formRef}
        onSubmit={(form, actions, formikHelper) => {
          console.log(form);
          console.log(formRef);
          setTimeout(() => {
            saveInvoice(form, actions, formikHelper);
            actions.setSubmitting(false);
          }, 1000);
        }}
      >
        {({
          handleSubmit,
          handleChange,
          setFieldValue,
          values,
          handleReset,
          errors,
          resetForm, isSubmitting


        }) 
Run Code Online (Sandbox Code Playgroud)

我使用控制台记录的表单状态,但表单始终为“isValid:True”。请检查下图。 在此输入图像描述

我也把它打印在html中。但 isValid 始终为 True。我需要这个来禁用我的按钮

打印状态

 <p> {formik.isValid=== true ? "True" : "False"} </p>
Run Code Online (Sandbox Code Playgroud)

我尝试下面的代码来禁用我的按钮

<Button className="btn btn-primary mr-1" type="submit" disabled={!formik.isValid}>
Run Code Online (Sandbox Code Playgroud)

提交

为什么 formik 表单有效性始终为真,即使必填字段为空。我花了更多的时间来解决这个问题。仍然无法解决这个问题。任何人都知道解决这个问题

reactjs formik

1
推荐指数
1
解决办法
8501
查看次数

使用突变反应查询重置 formik 表单

我有一个使用 formik 和反应查询的表单。我想在成功时重置表单。

有没有办法将 resetForm 函数作为参数传递给 onSuccess ?

const mutation = useMutation(
  (newUser) =>
    axios.post(`/api/accounts`, newUser),
  {
    onSuccess: (data) => {
      alert(JSON.stringify(data));
      router.push(`/confirm-email?email=${data.email}`);
    },
    onError: (error) => {
      if (error.response && error.response.data.message) {
        openSnackbar(error.response.data.message);
      } else {
        openSnackbar('Something went wrong, please retry later');
      }
    },
  }
);
Run Code Online (Sandbox Code Playgroud)

形式

<Formik
  onSubmit={(values, { setSubmitting, resetForm }) => {
    mutation.mutate(values);
    setSubmitting(false);
  }}
>
  ...
</Formik>
Run Code Online (Sandbox Code Playgroud)

reactjs formik react-query

1
推荐指数
1
解决办法
1673
查看次数

循环依赖,节点是:“密码”,是的

我收到上述错误。不知道该物体发生了什么。下面是我的对象。

export const loginValidator = yup.object({
  login: yup.string().when('password', {
    is: (v) => v < 9999 && v > 999,
    then: yup.string().required('Phone No is required').matches(phoneRegExp, 'Must be 10 digits'),
    otherwise: yup.string().email().required('Email is required'),
  }),
  password: yup.string().when('login', {
    is: (m) => phoneRegExp.test(m),
    then: yup
      .string()
      .required('Pin is Required')
      .matches(/^[0-9]+$/, 'Must be only digits')
      .min(5, 'Must be exactly 5 digits')
      .max(5, 'Must be exactly 5 digits'),
    otherwise: yup.string().required('password is required'),
  }),
});

Run Code Online (Sandbox Code Playgroud)

我得到的错误

Error: Cyclic dependency, node was:"password"
Run Code Online (Sandbox Code Playgroud)

这是怎么回事谢谢!!

reactjs react-native yup formik

1
推荐指数
1
解决办法
2882
查看次数