javascript - 表单重置后如何删除 React 可见的复选标记?
问题描述
我正在开发一个带有按钮来重置表单的 React 应用程序。当用户单击“重置”按钮时,所有状态都会恢复到它们的原始值。但即使在所有其他数据都清除后,复选标记仍处于选中状态。它似乎确实重置了状态,但复选标记仍然可见并且对用户来说是混乱的。我知道在初始加载时会读取 defaultChecked,但即使我完全删除 defaultChecked,复选标记仍然存在,所以我不确定问题出在哪里。我怀疑解决方案可能涉及 onChange,但我无法让它发挥作用。任何帮助表示赞赏。
const [checked, setChecked] = useState(false);
const clearSearch = () => {
setResults([]);
setQuery("");
setFormat("");
setChecked(false);
}
<label>
<input
type="checkbox"
id="searchAll"
defaultChecked={checked}
onChange={() => setChecked(!checked)}
/>
Search all formats
</label>
<button className="btn btn-danger"
onClick={event => {
event.preventDefault();
clearSearch();
}}>
Reset
</button>
GitHub 上的 App.js https://github.com/irene-rojas/loc/blob/master/src/App.js
解决方案
你的复选框实际上是一个不受控制的输入,这可能不是你想要的(它通常不在 React 中)。这是因为,尽管您已将onChange
事件连接到设置状态的处理程序,但您并没有从该状态读回输入。除了在defaultChecked
属性中 - 它不控制它是否实际检查。
您需要使用checked
属性,对于复选框,它本质上等同于value
文本或数字输入的属性:
<input
type="checkbox"
id="searchAll"
checked={checked}
onChange={() => setChecked(!checked)}
/>
(我已经删除了您的defaultChecked
属性,因为我认为您不需要它 - 但如果您愿意,请随时将其放回。重要的是有一个从状态值checked
读取的属性。)checked
推荐阅读
- hadoop - PriviledgedActionException(未能找到任何 kerberos tgt)
- unit-testing - 关于向量转换环境的#include 预处理器指令
- xamarin - 当我使用 TapGestureRecognizer 和 ViewModel with Messaging 发送命令时,如何添加按钮按下效果?
- xamarin.forms - 如何显示在列表视图中选择的项目默认值?
- angular - Angular 2-错误无法分配给引用或变量
- jira - 通过 CSV 的 Jira 导入问题 - 不保留文本字段中的嵌入式换行符
- sql - 如何按自定义顺序对 T-SQL 查询输出进行排序?
- javascript - JavaScript Pig Latin 元音逻辑错误,请求代码反馈
- amazon-s3 - 分段上传 S3
- php - 获取更大的 Facebook 个人资料图片 PHP SDK 问题大小