Реагируйте на ошибки формы входа в систему

#reactjs

Вопрос:

У меня есть простая форма входа, просто имя пользователя и пароль.

  • ввод имени пользователя должен обновлять свой атрибут значения при изменении.
  • ввод пароля должен обновлять свой атрибут значения при изменении.
  • The button Submit should be disabled until both username and password fields are filled . Я не уверен, как это сделать.

У меня есть несколько ошибок при сборке. Я не уверен, чего мне не хватает. Как мне это исправить? извините, моя реакция просто элементарна.

 import React from "react";
 

export default function LoginForm({ onSubmit }) {

this.state = { username: '', password: '' };
handleUsernameChange = (event) => this.setState({ email: event.target.value });
handlePasswordChange = (event) => this.setState({ email: event.target.value });

handleSubmitButton = () => {
    const { username, password } = this.state;
    const { onSubmit } = this.props;

    onSubmit(username-input, username-password);
  };
    return (
      <form>
        <div className="form-group">
            <input type="text" onChange={handleUsernameChange} id="username-input" placeholder="Username"/>
        </div>
        <div className="form-group">
            <input type="password" onChange={handlePasswordChange} id="password-input" placeholder="Password"/>
        </div>

        <button type="submit" onClick={onSubmit(username-input, password-input)}>Submit</button>

      </form>
    );
 
}
const mapDispatchToProps = dispatch => ({
    onSubmit: (username, password) => {
      dispatch(signup(username, password));
    },
});
mapDispatchToProps(LoginForm); 

ошибки:

  Line 9:1:    'handleUsernameChange' is not defined  no-undef
  Line 10:1:   'handlePasswordChange' is not defined  no-undef
  Line 12:1:   'handleSubmitButton' is not defined    no-undef
  Line 16:23:  'input' is not defined                 no-undef
  Line 21:42:  'handleUsernameChange' is not defined  no-undef
  Line 24:46:  'handlePasswordChange' is not defined  no-undef
  Line 27:49:  'username' is not defined              no-undef
  Line 27:58:  'input' is not defined                 no-undef
  Line 27:65:  'password' is not defined              no-undef
  Line 27:74:  'input' is not defined                 no-undef
  Line 35:16:  'signup' is not defined                no-undef
 

Комментарии:

1. несколько ошибок при сборке не совсем помогают, можете ли вы опубликовать подробные ошибки?

2. @Agney СДЕЛАЛ извините, я предположил, что ошибки для вас, гуру, были очевидны 🙂

Ответ №1:

Состояние является неизменяемым, поэтому вы в основном устанавливаете его как объект, содержащий только email то, что вы обрабатываете изменение. Вы должны сохранить каждый элемент в его собственном состоянии, а затем обработать состояние отключенной кнопки useEffect() , установив крючок.

Вот переработанная версия (вам нужно будет самостоятельно выполнить отправку в хранилище Redux, так как мы не знаем, используете ли вы Thunk или что-то подобное в качестве промежуточного программного обеспечения):

 import React, { useState, useEffect } from 'react';
 
const LoginForm = (props) => {
    const [ username, setUsername ] = useState('');
    const [ password, setPassword ] = useState('');
    const [ buttonDisabled, setButtonDisabled ] = useState(true);

    const handleSubmit = () => {
        dispatch(signup(username, password));
    };

    useEffect(() => {
        setButtonDisabled(
            ! (username !== '' amp;amp; password !== '')
        );
     }, [ username, password ]);

    return (
        <form>
            <div className="form-group">
                <input 
                    type="text" 
                    onInput={(e) => setUsername(e.target.value)} 
                    id="username-input" 
                    placeholder="Username"
                    value={ username }
                />
            </div>
            <div className="form-group">
                <input 
                    type="password" 
                    onInput={(e) => setPassword(e.target.value)}
                    id="password-input" 
                    placeholder="Password"
                    value={ password }
                />
            </div>

            <button 
                disabled={ buttonDisabled }
                type="submit" 
                onClick={ handleSubmit }
                value="Submit"
            />
      </form>
    );
};

export default LoginForm;

 

Комментарии:

1. спасибо большое, действительно ясно. У меня есть 2 ошибки: Line 9:9: 'dispatch' is not defined no-undef Line 9:18: 'signup' is not defined no-undef

2. Пожалуйста, ознакомьтесь с этим комментарием: вам нужно будет самостоятельно обработать отправку в свой магазин Redux, так как мы не знаем, используете ли вы Thunk или что-то подобное в качестве промежуточного программного обеспечения…