Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么赢了';单击“登录”时是否显示我的微调器?_Javascript_Reactjs_Debugging_Spinner - Fatal编程技术网

Javascript 为什么赢了';单击“登录”时是否显示我的微调器?

Javascript 为什么赢了';单击“登录”时是否显示我的微调器?,javascript,reactjs,debugging,spinner,Javascript,Reactjs,Debugging,Spinner,我想让我的微调器出现在用户单击登录时。我正在检查login()方法中的load是否为true。如果是,则显示微调器。我已经为此挣扎了几个小时,看不出我做错了什么 我做错了什么?我该如何修复它 import React, {Component} from 'react'; import fire from '../../config/Fire'; import classes from './Login.css'; import Spinner from '../../UI/Spinner/Spi

我想让我的微调器出现在用户单击登录时。我正在检查
login()
方法中的
load
是否为true。如果是,则显示微调器。我已经为此挣扎了几个小时,看不出我做错了什么

我做错了什么?我该如何修复它

import React, {Component} from 'react';
import fire from '../../config/Fire';
import classes from './Login.css';
import Spinner from '../../UI/Spinner/Spinner';

import { Link } from 'react-router-dom';


class Login extends Component {
    constructor(props) {
        super(props);
        this.state = {
            email: '',
            password: '',
            loading: false
        };
        this.login = this.login.bind(this);
        this.handleChange = this.handleChange.bind(this);
        this.signup = this.signup.bind(this);
    }

    handleChange(e) {
        this.setState({[e.target.name]: e.target.value});
    }

    login() { 
        fire.auth().signInWithEmailAndPassword(this.state.email, this.state.password).then((u) => {
        }).catch((error) => {
            console.log(error);
        });

        this.setState({loading: true});

        if(this.state.loading) {
            return(
              <Spinner/>
            );
        }
    }

    signup(e) {
        e.preventDefault();
        fire.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then((u) => {
        }).then((u) => {
            console.log(u)
        })
            .catch((error) => {
                console.log(error);
            })
    }

    render() {
        return (

            <div className={classes.Middle}>
                <div className="form-group">
                    <h1>Email address</h1>
                    <input value={this.state.email} onChange={this.handleChange} type="email" name="email"
                           className="form-control" placeholder="Enter email"/>
                </div>
                <div className="form-group">
                    <h1>Password</h1>
                    <input value={this.state.password} onChange={this.handleChange} type="password" name="password"
                           className="form-control" placeholder="Password"/>
                </div>

                <Link to={{
                    pathname: '/ChooseTruck'
                }}>
                    <button type="submit" onClick={this.login.bind(this)} className="btn btn-primary">Login</button>
                </Link>


                <button onClick={this.signup}>Signup</button>
            </div>
        );
    }
}

export default Login;
import React,{Component}来自'React';
从“../../config/fire”导入火;
从“/Login.css”导入类;
从“../UI/Spinner/Spinner”导入微调器;
从'react router dom'导入{Link};
类登录扩展组件{
建造师(道具){
超级(道具);
此.state={
电子邮件:“”,
密码:“”,
加载:错误
};
this.login=this.login.bind(this);
this.handleChange=this.handleChange.bind(this);
this.signup=this.signup.bind(this);
}
手变(e){
this.setState({[e.target.name]:e.target.value});
}
登录名({
fire.auth().使用email和password(this.state.email,this.state.password)登录。然后((u)=>{
}).catch((错误)=>{
console.log(错误);
});
this.setState({loading:true});
if(this.state.loading){
返回(
);
}
}
注册(e){
e、 预防默认值();
fire.auth().createUserWithEmailAndPassword(this.state.email,this.state.password)。然后((u)=>{
})。然后((u)=>{
控制台日志(u)
})
.catch((错误)=>{
console.log(错误);
})
}
render(){
返回(
电子邮件地址
密码
登录
报名
);
}
}
导出默认登录;

我明白了您的问题所在,您正在尝试在登录函数中返回加载程序,这是可行的,但在当前实现中不可行。我建议您做的是将
组件放入渲染的返回中,并仅在加载状态时显示它

大概是这样的:

render() {
    return (
        this.state.loading ? <Spinner /> : <div> rest of your code </div>
    )
}
如果你有任何问题,打电话给我


希望这有帮助。:)

登录应该是一个非呈现方法,它会在事件中发出登录请求。加载微调器应位于render方法(或其调用的函数)中

login(){
this.setState({loading:true});
fire.auth().signiWithEmailandPassword(this.state.email,this.state.password)
。然后((u)=>{
控制台日志(u);
})
.catch(console.error)
.then(()=>this.setState({loading:false}))
}
render(){
返回(
电子邮件地址
密码
登录
报名
{this.state.loading&&}
);
}

bro。。。。实际上,我只是按照你在看到你的帖子之前提到的方式自己修复了它。谢谢:那你就是野兽了!干得好
if(this.state.loading) {
        return(
          <Spinner/>
        );
    }
login() { 
  this.setState({loading: true});

  fire.auth().signInWithEmailAndPassword(this.state.email, this.state.password)
    .then((u) => {
      console.log(u);
    })
    .catch(console.error)
    .then(() => this.setState({loading: false}))
}


render() {
    return (

        <div className={classes.Middle}>
            <div className="form-group">
                <h1>Email address</h1>
                <input value={this.state.email} onChange={this.handleChange} type="email" name="email"
                       className="form-control" placeholder="Enter email"/>
            </div>
            <div className="form-group">
                <h1>Password</h1>
                <input value={this.state.password} onChange={this.handleChange} type="password" name="password"
                       className="form-control" placeholder="Password"/>
            </div>

            <Link to={{
                pathname: '/ChooseTruck'
            }}>
                <button type="submit" onClick={this.login.bind(this)} className="btn btn-primary">Login</button>
            </Link>


            <button onClick={this.signup}>Signup</button>

            {this.state.loading && <Spinner/>}
        </div>
    );
}