2017-10-12 5 views
0

다음은 SignIn 페이지에 대한 ReactJs 코드이며, "정의되지 않은"setState'속성을 읽을 수 없습니다. "라는 오류가 발생합니다. 기본적으로 내가하려는 것은 사용자가 나 기억 상자를 클릭 할 수 있으며 그 데이터는 다음 번에 저장소를 가져야한다는 것입니다.'ReactJs의 정의되지 않은'오류 인 setState '를 읽을 수 없습니다.

아무도 내가 이것을 어떻게 업데이트 할 수 있는지 제안 할 수 있습니까? 실수로 bind 두 가지가 함께이야 접합처럼

import React, {Component} from "react"; 
import axios from 'axios'; 
import {BrowserRouter as Router, Route, Link} from 'react-router-dom'; 
import {SignUp} from "./SignUp"; 
import {ForgotPassword} from "./ForgotPassword"; 

export class SignIn extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
    fields: {}, 
    errors: {} 
    } 
    this.onSubmit = this.onSubmit.bind(this); 
    this.onChange = this.handleCheckboxChange.bind(this); 
    } 

    handleValidation() { 
    let fields = this.state.fields; 
    let errors = {}; 
    let formIsValid = true 

    //Email 
    if(!fields["email"]) { 
    formIsValid = false; 
    errors["email"] = "Email ID is required"; 
    } 

    //Password 
    if(!fields["password"]) { 
     formIsValid = false; 
     errors["password"] = "Password is required"; 
    } 

    this.setState({errors: errors}); 
    return formIsValid; 
} 

    getInitialState() { 
    return { 
     isChecked: true 
    }; 
    } 

    handleCheckboxChange(event) { 
    console.log("checkbox changed!", event); 
    this.setState({isChecked: event.target.checked}); 
    } 


    onSubmit(e) { 
    e.preventDefault(); 
    if(this.handleValidation()) { 
     var apiBaseUrl = "http://rediy-dev.railsfactory.com/"; 
     var input = this.state.fields; 
     axios.post(apiBaseUrl+'/api/v1/sessions/login', input) 
     .then(function (response) { 
     console.log(response); 
     if(response.data.status == 200) { 
      console.log("Login successful"); 
      alert("Login successful"); 
     } 
     else if(response.data.status == 422) { 
      console.log("Invalid user details. Please enter again"); 
      alert("Invalid user details. Please enter again"); 
     } 
     }) 
     .catch(function (error) { 
     console.log(error); 
     }); 
    } 
    } 

    onChange(field, e) { 
    let fields = this.state.fields; 
    fields[field] = e.target.value; 
    this.setState({fields}); 
    } 


    render() { 
    return (
     <div id="login" className="form-popup" role="dialog"> 
     <div className="modal-dialog"> 
      <div className="modal-content"> 
      <form className="form-theme text-left"> 
       <div className="modal-header"> 
       <button type="button" className="close" data-dismiss="modal">&times;</button> 
       <h1 className="theme-title text-center">Sign In</h1> 
       </div> 
       <div className="modal-body"> 
       <div className="row"> 
        <div className="col-sm-12"> 
        <div className="form-group input"> 
         <input 
         value={this.state.fields["email"]} 
         onChange={this.onChange.bind(this, "email")} 
         className="form-control input__field" 
         type="text" 
         id="unit" 
         refs="email" 
         placeholder="Email Id *" 
         /> 
         <span style={{color: "red"}}>{this.state.errors["email"]}</span> 
        </div> 
        </div> 
        <div className="col-sm-12"> 
        <div className="form-group input"> 
         <input 
         value={this.state.fields["password"]} 
         onChange={this.onChange.bind(this, "password")} 
         className="form-control input__field" 
         type="text" 
         id="unit" 
         refs="password" 
         placeholder="Password *" 
         /> 
         <span style={{color: "red"}}>{this.state.errors["password"]}</span> 
        </div> 
        </div> 
        <div className="col-sm-6"> 
        <div className="forgot-password"> 
         <p> <Link to="/ForgotPassword">Forgot your password</Link></p> 
        </div> 
        </div> 
        <div className="col-sm-6"> 
        <div className="register"> 
         <p>New User? <Link to="/SignUp">Register</Link></p> 
        </div> 
        </div> 
        <div className="col-sm-12"> 
        <div className="checkbox checkbox-primary"> 
         <input 
         onChange={this.handleCheckboxChange} 
         checked={this.state.isChecked} 
         type="checkbox" 
         id="checkbox1" 
         /> 
         <label htmlFor="checkbox1"> 
         Remember Me 
         </label> 
        </div> 
        </div> 
       </div> 
       </div> 
       <div className="modal-footer"> 
       <div className="btn-wrap"> 
        <button type="submit" className="btn btn-theme save btn btn-primary" onClick={this.onSubmit}>Sign In</button> 
        <button type="submit" className="btn btn-theme btn btn-danger" data-dismiss="modal">Cancel</button> 
       </div> 
       </div> 
      </form> 
      </div> 
     </div> 
     </div> 
    ); 
    } 
} 
+3

가능한 복제 [catch되지 않은 형식 오류 : 정의되지 않은 재산 'setState를'을 읽을 수 없습니다 (https://stackoverflow.com/questions/32317154/uncaught-typeerror-cannot-read -property-setstate-of-undefined) – Chris

+1

누가 왜 명백한 복제본에 투표합니까? – Chris

+0

@Andrew 생성자의 어디에서나 this.handleValidation = this.handleValidation.bind (this);가 표시되지 않습니다. – Chris

답변

1
<input 
    onChange={this.handleCheckboxChange} 
    checked={this.state.isChecked} 
    type="checkbox" 
    id="checkbox1" 
    /> 
this.onChange = this.handleCheckboxChange.bind(this); //from your constructor 

보인다. 그것은 분명이 될 필요가있다 :

this.handleCheckboxChange= this.handleCheckboxChange.bind(this); 
this.onChange = this.onChange.bind(this); 
+0

이 또한 저에게 효과적이지 않습니다. 다음 번 로그인 할 때 쿠키를 저장하고 싶습니다. 누구든지 저를 도울 수 있습니까? –