У меня есть этот компонент флажка!
const CheckBox = props =>{
var [show,setshow] = useState(false);
const option = props.name.replace(/\s/g, '');
return(
<div className = "filter-option" onClick = {e=>setshow(!show)} data = {option}>
<div className = {show?"check-bock checked":"check-bock"} >
<i className = "fa fa-check"></i>
</div>
<label className = "font-20">{props.name}</label>
</div>
)
}
Отмеченный класс будет отображать галочку, но если я хочу отобразить несколько флажков, проблема в том, что все флажки отмечены сразу!
Я хочу, чтобы только один был отмечен, а другие не отмечены!
Решение состоит в том, чтобы сохранить состояние, в котором установлен флажок, и сохранить это состояние в родительском элементе, откуда отображаются все флажки.
const CheckBox = props =>{
const option = props.name.replace(/\s/g, '');
return(
<div className = "filter-option" onClick = {e=>props.setshow(prev => props.name == prev? '': props.name)} data = {option}>
<div className = {props.show?"check-bock checked":"check-bock"} >
<i className = "fa fa-check"></i>
</div>
<label className = "font-20">{props.name}</label>
</div>
)
}
const Parent = () => {
var [show,setshow] = useState('');
return (
<>
<Checkbox name = "first" show = {"first" === show} setShow = {setShow}/>
<Checkbox name = "second" show = {"second" === show} setShow = {setShow}/>
</>
)
}
извините, я не понял, как вы получаете доступ к setshow в качестве реквизита?
Извините, я забыл передать реквизит. Обновлен ответ
Причина в том, что вы используете одно состояние для всех флажков, поэтому оно будет проверять все флажки.