я хочу использовать 2 функции в onChange - PullRequest
0 голосов
/ 21 июня 2019
import React, { Component } from "react"; import { Link } from   
    "react-router-dom";
        const emailRegx = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        export default class ChefInfo extends Component { constructor(props) { super(props);   this.state = {    eInput: "",  
    small: "" };

    - 

           ----------

           ---------
           }

         handleChange = e => {
           this.setState({
             eInput: e.target.value
           });
         };

         emailTest = () => {
           if (emailRegx.test(this.state.eInput) === false) {
             this.setState({
               small: "your email is inccorect"
             });
           } else {
             this.setState({
               small: ""
             });
           }
         };

         render() {
           return (
             <div className="big-parent">
               <form>
                 <div className="input">
                   <label>
                     <strong>E-mail</strong>
                   </label>
                   <input
                     type="email"
                     className="input-filed"
                     onChange={() => {    //here the problem
                       this.handleChange();
                       this.emailTest();
                     }}
                   />
                   <small className="small">{this.state.small}</small>
                 </div>
               </form>
               <a href="#" className="btn btn-dark button">
                 <strong>READY</strong>
               </a>
             </div>
           );
         }    }

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вы можете изменить свой код так, чтобы он выглядел следующим образом.Это сделает ваш код рендера / шаблона более чистым.

handleEvent(event) {
  this.handleChange(event);
  this.emailTest();
}
.
.
.

<input
  type="email"
  className="input-filed"
  onChange={this.handleEvent}
/>
1 голос
/ 21 июня 2019

Ваш дескриптор использует параметр объекта события.

Итак, вы должны передать объект события.

onChange={(e) => {    //here the problem
    this.handleChange(e);
    this.emailTest();
}}

Но в этом случае вам не нужно использовать две функции.

Этого достаточно.

handleChange = (e) => {
    this.setState({
        eInput : e.target.value,
        small : emailRegx.test(e.target.value) ? '' : "your email is incorrect"
    })
};
...