reactjs - 在 React 中处理表单提交的正确方法是什么?
问题描述
在React 文档和各种项目中的一堆示例中,表单提交是这样处理的:
const FormComponent = () => {
const [val, setVal] = useState('');
const onChange = (e) => {
setVal(e.target.value);
}
const onSubmit = (e) => {
e.preventDefault();
console.log(val);
// handle submit logic using "val"
}
return (
<form onSubmit={onSubmit}>
<input type="text" value={val} onChange={onChange} />
<input type="submit" value="Submit" />
</form>
)
}
虽然在其他地方我见过这样的代码
const FormComponent = () => {
const [val, setVal] = useState('');
const onChange = (e) => {
setVal(e.target.value);
}
const onSubmit = () => {
console.log(val)
// handle submit logic using "val"
}
return (
<div>
<input type="text" value={val} onChange={onChange} />
<button onClick={onSubmit}>Submit</button>
</div>
)
}
他们似乎都实现了完全相同的目标。哪种方法更好?
解决方案
区别与 React 本身无关,而是与 HTML 语义有关。第一个例子是正确的。
有很多屏幕工具需要正确的 HTML 语义,例如可访问性工具,它们在正确的 HTML 下会更好地工作。
您可以轻松测试的一个示例是,使用第一个选项,在专注于输入的同时按 Enter 将触发onSubmit
(对于表单来说应该如此),而在第二个示例中则不会。
推荐阅读
- ios - UITableView 重新排序控件不隐藏
- ios - 通知操作中的 Appdelegate 启动选项为零
- r - stat_density_2d 绘图忽略填充美学
- chart.js - 在 chart.js 折线图上为距离与海拔设置自定义 X 轴刻度
- curl - Scrapy 没有从 curl scrapyd 设置中获取设置
- f# - 如何在 F# 中创建可变的泛型函数
- python - 类没有返回数据的属性错误
- xml - Ant Builds,但所有的junit测试都失败了
- python - 将二维浮点数组格式化为 2 位小数的最短语法是什么?
- c++ - c++ 为什么ifstream get() 函数返回无法识别的特殊字符?