Вход не читается должным образом в функции React (без JSX) - PullRequest
1 голос
/ 21 февраля 2020

Моя конечная цель заключается в том, чтобы сделать очень простую проверку электронной почты и получить мою кнопку «Далее», чтобы отключить или включить ее в зависимости от действительности электронной почты. Я тестировал свою функцию .isWorking () (управляет логическим значением, которое передается атрибуту disabled кнопки), и когда я тестирую с email.length> 0, функция работает! Но когда я немного изменяю его на email.length> 4, функция не работает и просто автоматически возвращает «true», отключая кнопку. Буду признателен за любую помощь - я полностью застрял в этом и был бы очень благодарен!

const validEmailRegex = RegExp(/^(([^<>()\[\]\\.,;:\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,}))$/);

class Signup extends React.Component {

constructor() {
    super();
    this.state = {email: ""};
    this.handleSubmit = this.handleSubmit.bind(this);
}

isWorking (event) {
    //testing function here 
    const email = event.target;
    if (email.length > 4 ) {
        return false;
    }
    return true;

    //if (validEmailRegex.test(email) === true) {
    //   return false;
    //}
    //return true;
    }

handleSubmit(event) {
    event.preventDefault();

    if (!event.target.checkValidity()) {
       this.setState({ invalid: true, displayErrors: true, 
    });
       return;
    }

    const form = event.target;
    const data = new FormData(form);

    for (let name of data.keys()) {
       const input = form.elements[name];
       const parserName = input.dataset.parse;
       console.log('parser name is', parserName);
       if (parserName) {
          const parsedValue = inputParsers[parserName](data.get(name));
       data.set(name, parsedValue);
       }
     }

     this.setState({
        res: stringifyFormData(data), invalid: false, displayErrors: false, 
     });
 }

render() {
    const { res, invalid, displayErrors } = this.state;

    //pass boolean to the button for disabling or not 
    const isEnabled = this.isWorking(event);

    return (
        React.createElement("div", { className: "container" },
        React.createElement("div", { className: "row" },

            React.createElement("form", { onSubmit: this.handleSubmit, noValidate: true, className: displayErrors ? 'displayErrors' : '' },
            React.createElement("input", { className: "form-control", name: "formEmail", id: "formEmail", type: "email", placeholder: "email"}),),

            React.createElement("span", { className: "span"},
                 React.createElement("button", { className: "button1", disabled: isEnabled, type: "button"}, "next")
        ),));}}

Ответы [ 2 ]

1 голос
/ 21 февраля 2020
class Signup extends React.Component {
  constructor() {
    super();
    this.state = { email: "", isEnabled: true };
    this.isWorking = this.isWorking.bind(this);
  }

  isWorking(event) {
    //testing function here
    console.log("event", event.target.value);
    const email = event.target.value;
    if (email.length > 4) {
      this.setState({ isEnabled: false });
    } else {
      this.setState({ isEnabled: true });
    }
    return true;
  }

  render() {
    const { displayErrors } = this.state;

    return React.createElement(
      "div",
      { className: "container" },
      React.createElement(
        "div",
        { className: "row" },
        React.createElement(
          "form",
          {
            onSubmit: this.handleSubmit,
            noValidate: true,
            className: displayErrors ? "displayErrors" : ""
          },
          [
            React.createElement("input", {
              className: "form-control",
              name: "formEmail",
              id: "formEmail",
              type: "email",
              placeholder: "email",
              onChange: this.isWorking
            }),
            React.createElement(
              "span",
              { className: "span" },
              React.createElement(
                "button",
                {
                  className: "button1",
                  disabled: this.state.isEnabled,
                  type: "button"
                },
                "next"
              )
            )
          ]
        )
      )
    );
  }

1 голос
/ 21 февраля 2020
class Signup extends React.Component {

constructor() {
    super();
    this.state = {email: "", isEnabled: true};
    this.handleSubmit = this.handleSubmit.bind(this);
}

isWorking (event) {
    //testing function here 
    const email = event.target.value;
    console.log(email.length)
    if (email.length > 4 ) {
        this.setState({ isEnabled: false});
    } else {
      this.setState({ isEnabled: true});
    }
    }

handleSubmit(event) {
    event.preventDefault();

    if (!event.target.checkValidity()) {
       this.setState({ invalid: true, displayErrors: true, 
    });
       return;
    }

    const form = event.target;
    const data = new FormData(form);

    for (let name of data.keys()) {
       const input = form.elements[name];
       const parserName = input.dataset.parse;
       console.log('parser name is', parserName);
       if (parserName) {
          const parsedValue = inputParsers[parserName](data.get(name));
       data.set(name, parsedValue);
       }
     }

     this.setState({
        res: stringifyFormData(data), invalid: false, displayErrors: false, 
     });
 }

render() {
    const { res, invalid, displayErrors } = this.state;

    //pass boolean to the button for disabling or not 
   // const isEnabled = this.isWorking(event);

    return (
        React.createElement("div", { className: "container" },
        React.createElement("div", { className: "row" },

            React.createElement("form", { onSubmit: this.handleSubmit, onChange:(e)=>this.isWorking(e), noValidate: true, className: displayErrors ? 'displayErrors' : '' },
            React.createElement("input", { className: "form-control", name: "formEmail", id: "formEmail", type: "email", placeholder: "email"}),),

            React.createElement("span", { className: "span"},
                 React.createElement("button", { className: "button1", disabled: this.state.isEnabled, type: "button"}, "next")
        ),)));}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...