【问题标题】:How to style Formik fields based on error and touched state如何根据错误和触摸状态设置 Formik 字段的样式
【发布时间】:2019-10-07 02:14:48
【问题描述】:

我有一个关于在 React 中使用 Formik@1.5.7 创建表单时呈现错误的问题。

我正在尝试根据输入是否被触摸并有错误来确定如何为我的输入正确呈现不同的样式。

 {({ values, error, touched }) => (
        <Form>
          <Field name="Lawn" type="text">
            {({ field, form }) => (
              <Input
                style={form.touched.Lawn && form.errors.Lawn ? 
                                   { style } : { styleError }}
                {...field}
                type="text"
                placeholder="Lawn Details"
              />
            )}
          </Field>

const style = {
  margin: '1em 0em',
  fontSize: '1.5em',
  backgroundColor: 'white',
};

const styleError = {
  margin: '1em 10em',
  fontSize: '1.5em',
};

我认为我的错误与未正确访问表单中的已触摸和错误状态有关。

任何帮助将不胜感激。

【问题讨论】:

    标签: reactjs styles formik


    【解决方案1】:

    您已经接近了,您只是错误地传递了stylestyleError。它们不应该用大括号括起来(而且它们也是向后的,因为错误格式会在没有错误时显示,反之亦然)。

    <Input
        style={form.touched.Lawn && form.errors.Lawn ? styleError : style}
        {...field}
        type="text"
        placeholder="Lawn Details"
    />
    

    这是full example

    【讨论】:

    • 如果 Lawn 是 FieldArray 的一部分,form.touched.Lawn 部分会改变吗?
    • 我尝试使用 style={form.touched[field.name] && form.errors[field.name] ? styleError : style} 但这不起作用。我使用 name="RequestForm[0].LawnDetails" 并尝试仅使用它作为名称,但由于 lodash 导致错误。
    • 您应该使用 Formik 的 getIn() 函数,例如getIn(form.errors, field.name).
    猜你喜欢
    • 2011-01-21
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-12
    • 1970-01-01
    • 2020-08-04
    • 2019-09-06
    相关资源
    最近更新 更多