根据Formik / Yup验证更改按钮的颜色

如何解决根据Formik / Yup验证更改按钮的颜色

用户必须在其中输入文字。如果文本是所需的文本,则应更改按钮的颜色,以便用户知道文本是正确的文本。

到目前为止,我已经完成了文本的验证,如果文本不是所需的文本,但我不知道如何将其连接到按钮的样式,则会显示一条错误消息。

这是我的代码

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

class CreateFridgeForm extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      open: false,redirectCreate: false,};
  }

  componentDidMount() {
    const { edit,getFridge,fridge,getFridges } = this.props;
    if (edit) {
      getFridge(fridge._id);
      getFridges();
    }
  }

  onopen = () => {
    this.setState({ open: true });
  };

  closeModal = () => {
    this.setState({ open: false });
  };

  handleDelete = values => {
    const { deleteFridge,getFridges } = this.props;

    deleteFridge(fridge._id);

    this.setState({ open: false });
    this.setState({ redirectCreate: true });
    getFridges();
  };

  render() {
    const { trigger } = this.props;
    const title = 'Do you want to delete a fridge?';

    const { open,redirectCreate } = this.state;
    if (redirectCreate) {
      return <Redirect to="/fridges" />;
    }

    const initialValues = {
      deleteText: '',};
    const wrongTextMessage =
      'You must write DELETE in order to delete the fridge';
    const requiredErrorMessage = 'This field is required';
    const deleteTextValidation = /DELETE\b/g;
    const validationSchema = Yup.object({
      deleteText: Yup.string()
        .matches(deleteTextValidation,wrongTextMessage)
        .required(requiredErrorMessage),});
    return (
      <Modal
        open={open}
        trigger={trigger}
        onopen={this.onopen}
        onClose={this.closeModal}
        size="small">
        <Modal.Header >{title}</Modal.Header>
        <Modal.Content >
          <Modal.Description >
            Are you sure you want to delete?
          </Modal.Description>
          <Formik
            initialValues={initialValues}
            validationSchema={validationSchema}
            onSubmit={values => this.handleDelete(values)}>
            {({ values,errors,touched,setFieldValue }) => (
              <Form>
                <Field
                  className="add-fridge-input"
                  name="deleteText"
                  as={Input}
                  placeholder="Write DELETE"
                />
                <div className="add-fridge-error">
                  {touched.deleteText && errors.deleteText
                    ? errors.deleteText
                    : null}
                </div>
               
                  <Button className="delete-modal-button" type="submit"> // here is the button
                    Confirm
                  </Button>
           
              </Form>
            )}
          </Formik>
        </Modal.Content>
      </Modal>
    );
  }
}

const mapStatetoProps = state => ({
  fridges: state.fridges.fridges,fridge: state.fridges.selectedFridge,});

const mapdispatchToProps = {
  getFridges: Creators.getFridgesRequest,getFridge: Creators.getFridgeRequest,deleteFridge: Creators.deleteFridgeRequest,};

export default connect(mapStatetoProps,mapdispatchToProps)(CreateFridgeForm);

如果validationSchema验证文本正确,是否可以通知按钮?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?