Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >在React中发生错误时更改现有输入字段的样式

在React中发生错误时更改现有输入字段的样式
EN

Stack Overflow用户
提问于 2020-06-07 23:05:11
回答 3查看 7.4K关注 0票数 6

在使用React库创建的React表单中,每当出现错误时,我希望将输入元素的边框颜色更改为1px实心红色

但是,正如我们所知,无论何时ErrorMessage创建新的验证错误,react都会使用呈现一个新的错误组件,所以基本上,当错误发生时,我们如何更改我们的现有输入字段颜色?

CSS:

代码语言:javascript
代码运行次数:0
复制
.formGroup input {
  width: 100%;
  border: none;
  border-bottom: 1px solid black;
}
.formGroup input:focus {
  outline: none;
}
.formGroup button {
  background-color: antiquewhite;
  border-radius: 3px;
  border: none;
  font-size: 15px;
  padding: 10px;
}
.error {
  color: red;
  text-align: start;
  font-size: 13px;
}

代码:

代码语言:javascript
代码运行次数:0
复制
import React, { Component } from "react";
import classes from "./P.module.css";
import { NavLink } from "react-router-dom";
import { Formik, Form, Field, ErrorMessage } from "formik";
import * as Yup from "yup";
const initialValues = {
  company_name: "",
  company_profile: "The Opinia is news and media company",
  location: "",
  phone_number: "",
  email: "",
  gst: "",
};

const onSubmit = (values) => {
  console.log("Form Data: ", values);
};

// for validation
const validationSchema = Yup.object({
  company_name: Yup.string().required("Required"),
  company_profile: Yup.string().required("Required"),
  location: Yup.string().required("Required"),
  email: Yup.string().required("Required").email("Invalid email format"),
  phone_number: Yup.number().required("Required"),
  gst: Yup.string().required("Required"),
});
export default function Projects2(props) {
  return (
    <div className={classes.main}>
      <Formik
        initialValues={initialValues}
        validationSchema={validationSchema}
        onSubmit={onSubmit}
      >
        <Form className={classes.form}>
          <div className={`${classes.formGroup}`}>
            <label htmlFor="company_name">Company Name</label>
            <Field type="text" id="company_name" name="company_name" />
            <ErrorMessage name="company_name" component={TextError} />
          </div>
          <div className={classes.formGroup}>
            <label htmlFor="company_profile">Company Profile</label>
            <Field type="text" id="company_profile" name="company_profile" />
            <ErrorMessage name="company_profile" component={TextError} />
          </div>
          <div className={classes.formGroup}>
            <label htmlFor="location">Location</label>
            <Field type="text" id="location" name="location" />
            <ErrorMessage name="location" component={TextError} />
          </div>
          <div className={classes.formGroup}>
            <label htmlFor="phone_number">Phone</label>
            <Field type="number" id="phone_number" name="phone_number" />
            <ErrorMessage name="phone_number" component={TextError} />
          </div>
          <div className={classes.formGroup}>
            <label htmlFor="email">Email</label>
            <Field type="email" id="email" name="email" />
            <ErrorMessage name="email" component={TextError} />
          </div>
          <div className={classes.formGroup}>
            <label htmlFor="gst">GST Number</label>
            <Field type="text" id="gst" name="gst" />
            <ErrorMessage name="gst" component={TextError} />
          </div>

          <div className={classes.formGroup}>
            <button type="submit">Submit</button>
          </div>
        </Form>
      </Formik>
    </div>
  );
}

export function TextError(props) {
  return <div className={classes.error}>{props.children}</div>;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-11 23:22:38

您可以使用react快速字段,以便通过react js表单执行验证。

票数 1
EN

Stack Overflow用户

发布于 2021-02-26 20:23:39

到目前为止,似乎还没有一种简单的方法可以做到这一点。您可以为<Field>呈现一个自定义子程序来实现这一点。示例:

代码语言:javascript
代码运行次数:0
复制
<Field type="text" name="firstName">
  { ({ 
       field, 
       meta: { touched, error } 
    }) => <input className={ touched && error ? "invalid" : "" } { ...field } />
  }
</Field>

然后在css中

代码语言:javascript
代码运行次数:0
复制
input.invalid {
  border-color: red;
}

更新:这里是指向文档的链接:field输入具有FieldInputProps的形状,meta是一个FieldMetaProps

然而,应该使用一个特殊的控制库,比如React Bootstrap或Materia,它可以促进这一点--您不应该直接使用Formik。 Formik只是用于收集/提交数据,而不是用于详细的表单元素。

票数 7
EN

Stack Overflow用户

发布于 2022-10-31 09:52:12

您可以通过CSS实现所需的结果。

让我们使用以下表单字段作为示例:

代码语言:javascript
代码运行次数:0
复制
<div>
    <label className={"formLabel"} htmlFor="phoneNumber">
        Phone number
    </label>
    <ErrorMessage className={"formError"} name="phoneNumber" component={'span'} />
    <Field className={"formInput"} name="phoneNumber" />
</div>

直到出现错误- Formik将不会呈现<ErrorMessage />组件

考虑到上面描述的行为,我们可以在<ErrorMessage />组件之前呈现一个CSS组件,并在发生错误时使用CSS类对ErrorMessage进行更改输入样式。

代码语言:javascript
代码运行次数:0
复制
.formError + input {
    border: 1px solid red;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62256709

复制
相关文章
Mysql在字段现有内容后面追加内容
在发布系统中所有前置任务里面增加一些内容,发布系统中大约有200+的项目,手动是不可能手动的,只有在数据库中操作了。
行 者
2019/12/05
3K0
【CSS】更改用户界面样式 ① ( 更改鼠标样式 | 更改鼠标样式应用场景 | 代码示例 )
在之前的 【CSS】轮播图案例开发 ( 基本设置 | 子绝父相 | 浏览器水平居中 | 圆角设置 | 绝对定位居中设置 ) 轮播图中 , 鼠标移动到 轮播图底部的小圆点上时 , 一般会变成小手形状的 , 这样用户体验更好 ;
韩曙亮
2023/04/16
2.4K0
【CSS】更改用户界面样式 ① ( 更改鼠标样式 | 更改鼠标样式应用场景 | 代码示例 )
ReactDOM.render在react中执行之后发生了什么?
通常是如下图使用,在提供的 container 里渲染一个 React 元素,并返回对该组件的引用(或者针对无状态组件返回 null)。本文主要是将ReactDOM.render的执行流程在后续文章中会对创建更新的细节进行分析,文中的源代码部分为了方便阅读将__DEV__部分的代码移除掉了。
flyzz177
2022/12/08
7090
ReactDOM.render在react源码中执行之后发生了什么?
通常是如下图使用,在提供的 container 里渲染一个 React 元素,并返回对该组件的引用(或者针对无状态组件返回 null)。本文主要是将ReactDOM.render的执行流程在后续文章中会对创建更新的细节进行分析,文中的源代码部分为了方便阅读将__DEV__部分的代码移除掉了。
flyzz177
2023/01/06
5660
MongoDB更改字段类型
1 Double 浮点型  2 String UTF-8字符串都可表示为字符串类型的数据  3 Object 对象,嵌套另外的文档  4 Array 值的集合或者列表可以表示成数组  5 Binary data 二进制  7 Object id 对象id是文档的12字节的唯一 ID 系统默认会自动生成  8 Boolean 布尔类型有两个值TRUE和FALSE  9 Date 日期类型存储的是从标准纪元开始的毫秒数。不存储时区  10 Null 用于表示空值或者不存在的字段  11 Regular expression 采用js 的正则表达式语法  13 JavaScript code 可以存放Javasript 代码  14 Symbol 符号  15 JavaScript code with scope  16 32-bit integer 32位整数类型  17 Timestamp 特殊语义的时间戳数据类型  18 64-bit integer 64位整数类型
周小董
2019/03/25
7K0
MongoDB更改字段类型
如何更改伪元素的样式
在前端开发中我们会经常用到伪元素,有时候需要通过js来修改伪元素的样式,那么有哪几种方式来修改伪元素的样式呢?
挥刀北上
2021/01/27
9.3K0
如何更改伪元素的样式
ReactDOM.render在react源码中执行之后发生了什么?
通常是如下图使用,在提供的 container 里渲染一个 React 元素,并返回对该组件的引用(或者针对无状态组件返回 null)。本文主要是将ReactDOM.render的执行流程在后续文章中会对创建更新的细节进行分析,文中的源代码部分为了方便阅读将__DEV__部分的代码移除掉了。
flyzz177
2022/09/30
5570
uni-app中更改复选框的默认样式
记一下uni-app复选框默认样式问题 /* #ifdef H5 */ uni-checkbox .uni-checkbox-input { border-radius: 50% !important; color: #ffffff !important; } uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked { border: none !important; background: #3d7eff; border
薛定喵君
2019/11/05
6.8K0
react的css样式
1、使用React的行内样式设置样式 (1)在JSX文件中定义样式变量,和定义普通的对象变量一样 let backAndTextColor = { backgroundColor:'blue', color:'#ff671b', fontSize:40 }; (2)JSX的调用 <div style={backAndTextColor}>行内样式测试</div> 也可以直接写到JSX中,如下: <div style={{backgroundColor:'blue',color:'#f
江一铭
2022/06/16
1.1K0
CSS样式更改——过渡、动画
上篇文章主要讲述了CSS样式更改中的2D转换,这篇文章我们来介绍下CSS样式更改中的过渡、动画基础用法。
前端皮皮
2020/11/25
1.2K0
CSS样式更改——文本Content
上篇文章主要讲述了CSS样式更改中的背景Background,这篇文章我们来谈谈文本Content内容的基础用法。
前端皮皮
2020/11/26
1.6K0
CSS字体字段样式
font-style属性用于定义字体风格,如设置斜体、倾斜或正常字体,其可用属性值如下:
乐心湖
2020/07/31
13.7K0
CSS字体字段样式
现有React架构无法解决的问题
但是,确实存在某些框架(比如Vue、Qwik)可以,但React无法解决的问题。这就是「极致性能优化」问题。
公众号@魔术师卡颂
2023/08/30
1870
现有React架构无法解决的问题
当你在浏览器中输入“google.com”并回车,会发生什么?
曾经遇到过的一个最喜欢的面试问题是这样的:你键入'google. com'到一个浏览器地址栏中, 并点击<Enter>, 之后会发生什么呢?
养码场
2019/07/31
1.6K0
当你在浏览器中输入“google.com”并回车,会发生什么?
CSS样式更改篇——背景Background
上篇文章主要讲述了CSS的基础用法,讲述了如何定义头文件,导入CSS文件,id和class选择器,元素选择器,后代选择器,子元素选择器,兄弟选择器,伪类选择器等等,让大家对CSS选择器有个简单的认识和了解。这篇接上篇文章,继续讲解CSS的基础用法。
前端皮皮
2020/11/26
1.5K0
ios 继承UITableViewController,更改tableview样式
// 继承UITableViewController,更改tableview样式 - (instancetype)initWithStyle:(UITableViewStyle)style { return [super initWithStyle:UITableViewStyleGrouped]; } 在新建的uitableviewcontroller中  加上上述的方法。   等于是重写父类的方法。可以实现tableview的style变成 UITableViewStyleGrouped 转载请注明
用户1219438
2018/02/01
1.2K0
如何更改滚动条样式?
如何自定义浏览器的滚动条呢,下面给大家讲解一下,其实很简单,通过设定css样式就可以实现。
申霖
2019/12/27
2.5K0
如何更改滚动条样式?
React学习(十)-React中编写样式CSS(styled-components)
React是一个构建用户界面的js库,从UI=render()这个等式中就很好的映射了这一点,UI的显示取决于等式右边的render函数的返回值.
itclanCoder
2020/10/28
2.4K0
React学习(十)-React中编写样式CSS(styled-components)
在浏览器输入 URL 回车后,会发生什么?
这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了。
Java技术栈
2019/12/03
9050
点击加载更多

相似问题

在发生错误时更改字段类

12

如何更改React电话号码输入字段的默认样式

112

onChange输入字段在react js编辑更新操作中不发生更改

12

如何在react中值发生更改时更新输入表单中的字段

116

在验证错误时更改输入框的格式样式

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文