0

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)
    {
        console.log(e.target.name);
        switch (e.target.name) {
            
            case 'txtName':
                if(e.target.value=='')
                {
                    setstate({...state.Error, EName:'Value Cannot be blank'})
                }
                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> {this.state.Error.EName==undefined ? '*':this.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

I have nested Error element for validation in state -

Error:{
        EName:'*',
        EEmail:'*',
        ESalary:'*'
    }

I am trying to bind it to react element as -

Name : <input name="txtName" type="text" onChange={(e)=>validationHandler(e)}></input>
            <label> {this.state.Error.EName==undefined ? '*':this.state.Error.EName} </label>

But Getting An Error -

enter image description here

2 Answers 2

2

You don't need to use this to access state in functional components. Just do, state.Error.EName. this is only necessary in class components.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks. This was helpful. Understood my mistake.
@CSharper yw. Happens to the best of us. ;)
1

You are using functional component and your state is not binded to the class component so you don't need to access it through this.

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>
)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.