const [ items, setItems ] = useState([
{ value: ..., text: '...', checked: false },
{ value: ..., text: '...', checked: false },
...
]);
const onChange = ({ target: { checked, dataset: { index } } }) => {
setItems(items.map((n, i) => i === +index ? { ...n, checked } : n));
};
<form>
{items.map((n, i) => (
<div>
<label>
<input
type="checkbox"
data-index={i}
value={n.value}
checked={n.checked}
onChange={onChange}
/>
{n.text}
</label>
</div>
))}
<button disabled={items.every(n => !n.checked)}>submit</button>
</form>
https://jsfiddle.net/ps6zt52a/