Я создаю приложение для реагирования, в котором флажки для заголовков заданий заполняются из динамических данных из api, и это будет точно так же, как данный фрагмент.
const departments =
[
{
"sectorId":29,
"sectorName":"Building Materials Mfg. & Distribution",
"departments":[
{
"deptName":"Manufacturing",
"jobTitles":[
{
"453":false,
"JobTitleID":453,
"DepartmentID":101,
"JobName":"Consultant",
"Deleted":false,
"SortOrder":5
},
{
"323":true,
"JobTitleID":323,
"DepartmentID":101,
"JobName":"Quality Control",
"Deleted":false,
"SortOrder":1
}
]
},
{
"deptName":"Warehouse",
"jobTitles":[
{
"326":false,
"JobTitleID":326,
"DepartmentID":98,
"JobName":"Warehouse Supervisor",
"Deleted":false,
"SortOrder":1
}
]
},
{
"deptName":"Administration",
"jobTitles":[
{
"384":true,
"JobTitleID":384,
"DepartmentID":115,
"JobName":"Controller",
"Deleted":false,
"SortOrder":1
}
]
}
]
}
]
const handleJobTitle = (event, job) => {
const { checked } = event.target;
if (checked) {
document.getElementById(job.JobTitleID).checked = true;
} else {
document.getElementById(job.JobTitleID).checked = false;
}
console.log(document.getElementById(job.JobTitleID));
};
const App = () => (
<div> {departments && departments.map((levelOne, i) => (
<div
key={i}
>
<p> {levelOne.sectorName} </p>
{levelOne.departments.map((levelTwo, j) => (
<div key={j}>
<p >
{" "}
{levelTwo.deptName}{" "}
</p>
{levelTwo.jobTitles.map((job, l) => (
<div
key={l}
>
<input type="checkbox" id={job.JobTitleID} onChange={(e) => {handleJobTitle(e, job)}} name={job.JobName} checked={job[job.JobTitleID]}/>
<span>{job.JobName}</span>
</div>
))}
</div>
))}
</div>
))} </div>
)
// Render it
ReactDOM.render(
<App />,
document.getElementById("root")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
Здесь jobTitles
данные будут такими,
"jobTitles":[
{
"453":false,
"JobTitleID":453,
"DepartmentID":101,
"JobName":"Consultant",
"Deleted":false,
"SortOrder":5
},
{
"323":true,
"JobTitleID":323,
"DepartmentID":101,
"JobName":"Quality Control",
"Deleted":false,
"SortOrder":1
}
]
И я устанавливаю флажок checked
на основе значения "453":false
, например,
<input type="checkbox" ...... checked={job[job.JobTitleID]}/>
И здесь отмечены флажки, но когда я пытаюсь снять флажок в onChange
обработчике, например,
const handleJobTitle = (event, job) => {
document.getElementById(job.JobTitleID).checked = false;
}
Флажки не сняты. Если я консоль / проверяю элемент ввода, то атрибут checked
не удаляется.
Дополнительная информация: также невозможно установить флажок, который находится в состоянии unchecked
.. В общем, я не мог изменить этот флажок ..
Может ли кто-нибудь помочь мне найти решение, и я слишком долго застрял в этом, поскольку я новичок, чтобы отреагировать ...
Заранее большое спасибо.
job[job.JobTitleID]
не находится в состоянии реакции / свойствах и никогда не обновляется. - person Drew Reese   schedule 30.10.2020state/props
в этом случае пожалуйста.. - person Undefined   schedule 30.10.2020fieldset
при щелчке по выбранному элементу. - person Undefined   schedule 23.11.2020