我仍然是React的新手,但我觉得这是一个非常基本的问题,我无法确定解决方案 . 我有一个登录表单,其中包含使用电子邮件/密码将登录数据作为Firebase登录的状态,并设法通过传递它来使其工作 . 其中一种状态是错误,最初用于确保输入了电子邮件和密码 - 但我想用它来存储/显示任何Firebase错误 . 但是,当Firebase返回错误(密码错误,没有用户等)时,我无法将其推回到LoginForm错误状态 . 有人可以帮忙吗?谢谢!

我有三个文件:

actions/auth.js :这用firebase处理登录 .

export const startLogin = (loginData) => {
    return () => {
        return firebase.auth()
            .signInWithEmailAndPassword(loginData.email, loginData.password)
            .catch((error) => {
                const errorCode = error.code;
                const errorMessage = error.message;
                console.log(errorCode, errorMessage);
                if (errorCode == 'auth/user-not-found') {
                    console.log('User not found.');
                } else if (errorCode == 'auth/wrong-password') {
                    console.log('Wrong password.');
                } else if (errorCode == 'auth/network-request-failed') {
                    console.log('Network error.');
                }
            });
    };
};

components/LoginPage.js :这是托管LoginForm组件的页面

export class LoginPage extends React.Component {
    onSubmit = (loginData) => {
        this.props.startLogin(loginData);
        if (loginData.error == '') {
            this.props.history.push('/dashboard');
        } else {
            console.log('ERROR DETECTED');
        }

    };
    render() {
        return(
            <div className="box-layout">
                <div className="box-layout__box">
                    <LoginForm 
                        onSubmit={this.onSubmit}
                    />
                </div>
            </div>
        );
    }
};

const mapDispatchToProps = (dispatch) => ({
    startLogin: (loginData) => dispatch(startLogin(loginData))
});

export default connect(undefined, mapDispatchToProps)(LoginPage);

components/LoginForm.js :带有输入和状态的登录表单 .

export default class LoginForm extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            email: '',
            password: '',
            error: ''
        };
    };

    onEmailChange = (e) => {
        const email = e.target.value;
        this.setState(() => ({ email }));
    };

    onPasswordChange = (e) => {
        const password = e.target.value;
        this.setState(() => ({ password }));
    };

    onSubmit = (e) => {
        e.preventDefault();

        if (!this.state.email || !this.state.password) {
            this.setState(() => ({ error: 'Please provide email and password.' }));
        } else {
            this.setState(() => ({ error: '' }));
            this.props.onSubmit({
                email: this.state.email,
                password: this.state.password
            });
        }
    };

    render() {
        return (
            <form className="form" onSubmit={this.onSubmit}>
                <label htmlFor="email">Email Address</label>
                <input
                    className="text-input"
                    id="email"
                    name="email"
                    onChange={this.onEmailChange}
                    placeholder="Email address"
                    type="email"
                />
                <label htmlFor="password">Password</label>
                <input
                    className="text-input"
                    id="password"
                    name="password"
                    onChange={this.onPasswordChange}
                    placeholder="Password"
                    type="password"
                />
                {this.state.error && <p className="form__error">{this.state.error}</p>}
                <button className="button">Login</button>
            </form>
        );
    };
}