我认为您想得太多了,只需坚持使用受控组件并通过状态管理表单数据即可。
但是,如果您确实不想使用受控组件,因为您不想调用 render 方法,那么您就不必这样做。
这是因为表单元素的工作方式与 React 中的其他 DOM 元素有点不同,因为在 HTML 中,表单元素如<input>
, <textarea>
, and <select>
自然维护自己的状态并根据用户输入更新它。请参阅官方表格文档 https://reactjs.org/docs/forms.html.
React 不会把它从你身边夺走。这意味着您可以像使用普通 JS 一样使用表单。
还值得一提的是,在 React 世界中,这种让数据纯粹由 DOM 处理而不是使用 React 组件处理的方式被称为不受控制的组件.
执行
至于实践中的情况,我可以想到两种方法,一种是with refs
:
handleSubmit = (e) => {
e.preventDefault();
console.log(this.input.value); // whatever you typed into the input
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<input type="text" name="name" ref={input => this.input = input} />
<input type="submit" value="submit" />
</form>
);
}
另一种方法是通过event
object:
handleSubmit = (e) => {
e.preventDefault();
console.log(e.target.name.value); // whatever you typed into the input
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<input type="text" name="name" />
<input type="submit" value="submit" />
</form>
);
}