#javascript #reactjs #checkbox #material-ui
#javascript #reactjs #флажок #material-ui
Вопрос:
<FormControlLabel onChange={handleCurrentProjectChange} value="end" control={<Checkbox style={{ color: "#C8102E" }} />} label={
<Typography style={{ fontSize: 15 }}>
Check if project "In Progress"
</Typography>
}
labelPlacement="end"
Итак, вот мой флажок из Material-UI, и я хочу создать const bool, который позволяет мне отправлять данные, если флажок установлен, он отправляет как «true». Я знаю, что мне нужно добавить check={ } prop внутри FormControl, но я не знаю, как его вызвать.
const HandleProgressCheckbox = (project_in_progress) => {
setProgressCheckbox({currentProject.project_in_progress ? true : false}),
};
Я пытался начать, но это может быть совершенно неправильно.
Кстати, у флажка есть метка «project_in_progress». Извините за мои плохие навыки объяснения, я надеюсь, это понятно. Помогите, пожалуйста.
Ответ №1:
В моем случае я сделал это:
...
const {isPublic, isBuzy} = this.props;
<FormControlLabel
control={
<Checkbox
onChange={this.handleChangeIsPublic}
name='isPublic'
checked={isPublic}
disabled={isBuzy} /> }
label="Is public?"
/>
...
и реализация handleChangeIsPublic:
handleChangeIsPublic = (e) => {
const isChecked = e.target.checked;
const { dispatch } = this.props;
dispatch(actions.setPublicState(isChecked));
}
Я использую «redux» в своем проекте, если вам нужно сделать это только с одним «reactjs», тогда вам нужно что-то вроде:
handleChangeIsPublic = (e) => {
const isChecked = e.target.checked;
this.setState({
isPublic: isChecked ? true : false,
});
}
Upd:
Я изменил вашу версию, чтобы использовать перехваты, и вот что произошло:
import React, { useState, useEffect } from 'react';
import Checkbox from '@material-ui/core/Checkbox';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import Typography from '@material-ui/core/Typography';
export default function ProjectInProgress() {
const [inProgress, setInProgress] = useState(false);
function handleInProgressChange(e) {
setInProgress(e.target.checked);
}
useEffect(() => {
if (inProgress === true) {
alert(`inProgress is ${inProgress}`);
}
});
return (
<FormControlLabel
value = "end"
control = {
<Checkbox
onChange={handleInProgressChange}
checked={inProgress}
style={{ color: "#C8102E" }} />}
label={
<Typography style={{ fontSize: 15 }}>
Check if project "In Progress"
</Typography>}
labelPlacement="end"
/>
)
}
Я надеюсь, что смогу вам помочь.
Комментарии:
1. Случайно, вы не знаете, как это сделать с помощью React Hooks? не могли бы вы попробовать создать функциональный компонент?
2. Обновил мой ответ