I'm new to React and for learning purpose I'm trying to create an App, but when I'm compiling my code I'm getting error TypeError: Cannot read property 'state' of undefined. Can someone please help me with how can I access Object field for comparison purpose. I'm getting error in line: if(this.state.planType==='prepaid') How can I access/ get the value of 'planType' of plan object?
Login.js
import React from 'react';
import 'bootstrap/dist/css/bootstrap.min.css';
import { Navbar,Nav } from 'react-bootstrap';
import axios from 'axios';
class Login extends React.Component{
constructor(){
super();
this.state={plan:{id:'',planType:'',data:'',minData:'',maxData:'',calls:''},
message:'',errorMessage:'',isChecked:''}
}
handelChange=(e)=>{
e.preventDefault();
let {state:fieldName,value}=e.target
this.setState({[fieldName]:value})
}
handelPtype=(e)=>{
axios.get('plan.json')
.then(response=>{
this.setState({plan:response.data})
console.log(response.data)
})
this.setState({planType:e.target.value});
}
validate(e){
e.preventDefault();
if(this.state.planType==='prepaid'){
if(this.state.data>this.state.minData)
{
this.setState({errorMessage:"Data should be less than 20 Gigs"})
}
}
}
render(){
return(<React.Fragment>
<Navbar className="mr-auto" bg="primary" variant="dark">
<Navbar.Brand>XYZ Telecom</Navbar.Brand>
<Nav className="text text-white">Add Plan</Nav>
<Nav className="text text-white">Show Plan</Nav>
</Navbar>
<form onSubmit={this.validate} className="form" style={{border:"1px solid black", width:"50%",marginLeft:"250px",marginTop:"100px"}}>
<h1 style={{backgroundColor:"lightblue"}}>Plans</h1>
<div className="form-group form-inline">
<label>Plan Type
<input type="radio" value="prepaid" onChange={this.handelPtype} checked={this.state.planType==="prepaid"} className="form-control"/>Prepaid
<input type="radio" value="postpaid" onChange={this.handelPtype} checked={this.state.planType==="postpaid"} className="form-control"/>Postpaid
</label>
</div>
<div className="form-group"> <label>
Plan Data</label>
<input type="text" className="form-control" value={this.state.data} onChange={this.handelChange} name="data"/></div>
{this.state.errorMessage}
<div className="form-group">
<label>Calls</label>
<input type="text" value={this.state.calls} onChange={this.handelChange} className="form-control" name="calls"/><br/></div>
<button type="submit" onClick={this.validate} className="btn btn-primary">Set Plan</button>
</form>
</React.Fragment>)
}
}
export default Login;
Plan.json
[{"id":"1","planType":"postpaid","data":"200","minData":"20","maxData":"200","calls":"500"},
{"id":"2","planType":"prepaid","data":"300","minData":"20","maxData":"200","calls":"500"},
{"id":"3","planType":"postpaid","data":"300","minData":"20","maxData":"200","calls":"500"},
{"id":"4","planType":"prepaid","data":"400","minData":"20","maxData":"200","calls":"500"}
]
Thanks in advance.