javascript - React - 输入复选框 onchange 不会第一次触发
问题描述
复选框输入的行为不是很可靠。
我正在根据商店的状态设置复选框的状态。这工作正常。但是有时选中复选框不会触发onchange
. 再次选中该框将触发,但是 UI 将显示错误的状态,因为它第一次触发失败。
我正在使用 NextJS。这主要发生在第一次加载页面或硬刷新时。
import { useDispatch, useSelector } from 'react-redux';
import _cloneDeep from 'lodash/cloneDeep';
export default function Privacy() {
const consentObj = useSelector((state) => state.cookieOptions);
const dispatch = useDispatch();
const analyticsConsent = useSelector(
(state) => state.cookieOptions.analytics
);
function toggleConsentAnalytics() {
// this function will not fire on first input onchange
const newSettings = _cloneDeep(consentObj);
newSettings.analytics = !consentObj.analytics;
dispatch({ type: 'SET_COOKIE_OPTIONS', payload: newSettings });
}
return (
<div>
<div className={css.settingContainer}>
<strong>Analytics cookie</strong>
<label>
<div className={css.switchWrap}>
{analyticsConsent ? 'On' : 'Off'}
<span className={css.switch}>
<input
defaultChecked={analyticsConsent}
onChange={() => toggleConsentAnalytics()}
type="checkbox"
/>
<span className={css.slider}></span>
</span>
</div>
</label>
</div>
</div>
);
}
我已经从我的示例中删除了我认为不相关的代码。
我有一个使用 Class 组件的相同流程,它按预期工作。但似乎我们应该从这个转向功能组件,所以非常想解决这个问题而不是恢复到一个类!
提前感谢您的任何帮助
解决方案
为确保您的复选框处于正确状态,您只需使用选中的属性:
<input type="checkbox"
checked={myValue}
onChange={(e) => setMyValue(e.target.checked)}
/>
推荐阅读
- javascript - Vue -v 在选择标签中建模对象
- c - 释放结构中定义的数组的正确方法
- unicode - FastText 显示中文 (WindowsOS?)
- mysql - Nextcloud (docker) 无法连接到 Mysql (docker) SQLSTATE[HY000] [2002]
- typescript - tsc 忽略 .yaml 文件,即使它设置为包含在 tsconfig.json 中
- android - SetForegroundAsync 在 Workmanager 的 ListenableWorker 中创建前台服务不起作用
- php - 我想为安装在一个 WordPress 中的 2 个自定义主题创建 ACF
- javascript - iink - 无效的箭头函数参数
- ajax - 如何使用 Laravel 分页执行 select2 结果无限滚动
- javascript - 每次构建后如何将路由器视图发布到后端一次