在 React.js 中使用表单
在简单的 HTML 表单中,表单元素会在内部保留其值,并在提交表单按钮点击时提交。
示例
<!DOCTYPE html> <html> <head> <title>Form Example</title> </head> <body> <form> <label> User Name: <input type="text" name="username" /> </label> <input type="submit" value="Submit Form" /> </form> </body> </html>
在上面的示例中,我们有一个名为 username 的简单输入,我们可以在表单提交时接收其值。HTML 表单的默认行为是导航到新页面,即表单提交后的页面。
但是,如果我们有一个表单提交处理程序 JavaScript 函数,它也可以验证表单数据,则可以获得更多优势。验证将向用户提供相关反馈。
React 有一种处理表单提交的技术,称为受控组件。
与 HTML 中一样,input、textarea 等元素会保留自己的状态并根据用户操作进行更新。在 React 中,可变字段与状态对象一起保留。
使用 React 受控组件方法处理 username 字段 -
class UserForm extends React.Component { constructor(props) { super(props); this.state = {username: ''}; this.handleChange = this.handleChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); } handleChange(event) { this.setState({username: event.target.value}); } handleFormSubmit(event) { console.log('username: ' + this.state.username); event.preventDefault(); } render() { return ( <form onSubmit={this.handleFormSubmit}> <label> Name: <input type="text" value={this.state.username} onChange={this.handleUsernameChange} /> </label> <input type="submit" value="Submit" /> </form> ); } }
这里我们有一个 onChange 处理程序函数,用于更新状态字段 username。
在 formSubmit 中,我们只是在浏览器中显示控制台日志以显示提交的用户姓名。
其他受控类型的组件包括 textarea、select 标签、单选按钮等。
也有一些不受控的组件,例如文件类型,它们本质上是只读的,并且仅在表单提交时获取其值。
使用单个 JS 函数处理多个表单输入 -
handleInputChange(event) { const value = event.target.value; const name = event.target.name; this.setState({ [name]: value }); }
应避免使用空值的受控输入字段,可以通过使用状态初始化为字段提供默认值来避免。
对于 React 中表单处理的完整解决方案,可以使用像 formik 这样的第三方库。它易于使用验证、向用户提供反馈等等。
广告