e.target.value == true
всегда будет ложным, потому что e.target.value
- это строка . Ваш isBusiness
будет преобразован в "true"
или "false"
, и оба значения "true" == true
и "false" == true
ложны.
Как правило, вы редко используете value
с флажками и используете только value
с флажками, если вы отправляете форму куда-то; он предоставляет значение для отправки (по умолчанию это "on"
). Вместо этого используйте checked
:
<input
type="checkbox"
checked={isBusiness}
id="isBusiness"
onChange={businessChange}
name="check"
/>
Затем
const businessChange = e => {
if (e.target.checked) {
console.log(isBusiness);
setIsBusiness(true);
} else {
console.log(isBusiness);
setIsBusiness(false);
}
};
Или просто:
const businessChange = e => {
console.log(isBusiness);
setIsBusiness(e.target.checked);
};
const {useState} = React;
const Example = () => {
const [isBusiness, setIsBusiness] = useState(false);
const businessChange = e => {
console.log(isBusiness);
setIsBusiness(e.target.checked);
};
return (
<input
type="checkbox"
checked={isBusiness}
id="isBusiness"
onChange={businessChange}
name="check"
/>
);
};
ReactDOM.render(<Example />, document.getElementById("root"));
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.12.0/umd/react-dom.production.min.js"></script>
Примечание: Это немного путает с журналированием, потому что вы всегда регистрируете старое значение. :-) Вот версия, записывающая значение new :
const {useState} = React;
const Example = () => {
const [isBusiness, setIsBusiness] = useState(false);
const businessChange = e => {
console.log(e.target.checked);
setIsBusiness(e.target.checked);
};
return (
<input
type="checkbox"
checked={isBusiness}
id="isBusiness"
onChange={businessChange}
name="check"
/>
);
};
ReactDOM.render(<Example />, document.getElementById("root"));
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.12.0/umd/react-dom.production.min.js"></script>
Однако я бы склонялся к тому, чтобы вообще не использовать флаг-флажок в обработчике, как показано keikai они не показывают правильную настройку флажка. Вот версия, регистрирующая новое значение (не старое):
const {useState} = React;
const Example = () => {
const [isBusiness, setIsBusiness] = useState(false);
const businessChange = e => {
console.log(!isBusiness);
setIsBusiness(!isBusiness);
};
return (
<input
type="checkbox"
checked={isBusiness}
id="isBusiness"
onChange={businessChange}
name="check"
/>
);
};
ReactDOM.render(<Example />, document.getElementById("root"));
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.12.0/umd/react-dom.production.min.js"></script>