I have tried a lot but the react Check box checked is not working properly.There may be a common mistake That I am unable to figure out.I am trying to change the state of the react checkbox by using use state and changing the checked by of isAdmin by sending a boolean value to it but it is not working.
Pls Help !!!!!
Here is the Edit Screen where the checkbox is present.
import React, { useState, useEffect } from 'react';
import { Link } from 'react-router-dom';
import { Form, Button,} from 'react-bootstrap';
import { useDispatch, useSelector } from 'react-redux';
import Message from '../components/Message';
import Loader from '../components/Loader';
import { getUserDetails } from '../actions/userActions';
import FormContainer from '../components/FormContainer';
const UserEditScreen = ({ match, history }) => {
const userId = match.params.id
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [isAdmin,setIsAdmin] = useState(false);
const dispatch = useDispatch();
const userDetails = useSelector((state) => state.userDetails);
const { loading, error, user } = userDetails;
useEffect(()=>{
if(!user.name || user._id !==userId){
dispatch(getUserDetails(userId))
}else{
setName(user.name)
setEmail(user.email)
setIsAdmin(user.isAdmin)
}
}, [dispatch,userId,user])
const submitHandler = (e) => {
e.preventDefault()
}
return (
<>
<Link to = '/admin/userlist' className='btn btn-dark my-3'>
Go Back
</Link>
<FormContainer>
<h1>Edit User</h1>
{/* {message && <Message variant='danger'>{message}</Message>}
{error && <Message variant='danger'>{error}</Message>}
{loading && <Loader />} */}
{loading ? <Loader />: error ? <Message variant='danger'>{error}</Message> :(
<Form onSubmit={submitHandler}>
<Form.Group controlId='name'>
<Form.Label>Enter Name</Form.Label>
<Form.Control
type='text'
placeholder='Enter Name'
value={name}
onChange={(e) => {
setName(e.target.value);
}}
></Form.Control>
</Form.Group>
<Form.Group controlId='email'>
<Form.Label>Email Address</Form.Label>
<Form.Control
type='email'
placeholder='Enter Email'
value={email}
onChange={(e) => {
setEmail(e.target.value);
}}
></Form.Control>
</Form.Group>
<Form.Group className='py-3' controlId='isadmin' >
<Form.Check
label='If Admin then Check'
id='useradmin'
type='checkbox'
checked={isAdmin}
onChange={(e) => {
setIsAdmin(e.target.checked); }}
></Form.Check>
</Form.Group>
<Button className='py-3' type='submit' variant='primary'>
Update
</Button>
</Form>
)}
</FormContainer>
</>
);
};
export default UserEditScreen;
CodePudding user response:
There's a slight change required in your onChange handler
Current way
onChange={(e) => {setIsAdmin(e.target.checked); }}
Correct way
onChange={(e) => {setIsAdmin(e.target.value); }}
Here, e
is the event
, which in this case is change
, target
is the element that triggered the event, which in this case is the Form.check
, and value
is the value of the element. Thus you have to set your state (in this case isAdmin
) with the value of that element.
CodePudding user response:
You can also consider code like this.
onChange={() => {
setIsAdmin((prev) => !prev);
}}