我认为您想多了,只是坚持使用受控组件并通过状态管理表单数据。
但是,如果您真的不想使用受控组件,因为您不想调用 render 方法,那么您不必这样做。
这是因为表单元素的工作方式与 React 中的其他 DOM 元素略有不同,因为在 HTML 中,诸如<input>
、<textarea>
、 之类的表单元素<select>
自然会维护自己的状态并根据用户输入进行更新。请参阅官方表格文档。
而 React 不会让你失去这些。这意味着您可以像使用 vanilla JS 一样使用表单。
还值得一提的是,在 React 世界中,这种将数据完全由 DOM 处理而不是使用 React 组件处理的方式被称为不受控制的组件。
执行
至于如何做到这一点看在实践中,我能想到的两种方式,你可以做到这一点,一个是用 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
对象:
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>
);
}