I have below code :
import React,{useState} from 'react'
const iState ={
Name : '',
Email :'',
Salary :0,
Error:{
EName:'*',
EEmail:'*',
ESalary:'*'
}
}
function ReactForm() {
const [state, setstate] = useState(iState);
function validationHandler(e)
{
switch (e.target.name) {
case 'txtName':
console.log(e.target.value);
if(e.target.value=='')
{
console.log('inside condition')
setstate({...state.Error, EName:'Value Cannot be blank'})
console.log(state);
}
else
{
console.log('inside else condition')
setstate({...state, EName:''})
}
setstate({...state, Name:e.target.value})
break;
case 'txtEmail':
setstate({...state, Email:e.target.value})
break;
case 'txtSalary':
setstate({...state, Salary:e.target.value})
break;
default:
break;
}
console.log(state);
}
return (
<div>
Name : <input name="txtName" type="text" onChange={(e)=>validationHandler(e)}></input>
<label> {state.Error.EName==undefined ? '*':state.Error.EName} </label>
<br></br>
Email : <input name="txtEmail" type="text" onChange={(e)=>validationHandler(e)}></input>
<br></br>
Salary : <input name="txtSalary" type="text" onChange={(e)=>validationHandler(e)}></input>
<br></br>
<button onClick={validationHandler}>Validate Us</button>
</div>
)
}
export default ReactForm
In this, iState has Error portion nested within -
const iState ={
Name : '',
Email :'',
Salary :0,
Error:{
EName:'*',
EEmail:'*',
ESalary:'*'
}
}
When I am trying to update the nested state of Error , its not getting updated -
if(e.target.value=='')
{
console.log('inside condition')
setstate({...state.Error, EName:'Value Cannot be blank'})
console.log(state);
}
else
{
console.log('inside else condition')
setstate({...state, EName:''})
}
I can see it entering within else block , but not updating the state.
I also tried with - setstate({...state.Error, EName:''})
EDIT 1 :
if(e.target.value=='')
{
console.log('inside condition')
setstate({ ...state, Error: { ...state.Error, Ename: 'Value Cannot be blank' }})
console.log(state);
}
else
{
console.log('inside else condition')
setstate({ ...state, Error: { ...state.Error, Ename: 'Value Cannot be blank' }})
}
Setting state changed -setstate({ ...state, Error: { ...state.Error, Ename: 'Value Cannot be blank' }})
Still state not getting updated -
