首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1构建Product Hunt项目
1.2设置开发环境
1.3针对Windows用户的特殊说明
1.4JavaScript ES6/ES7
1.5什么是组件
1.6构建Product组件
1.7让数据驱动Product组件
1.8应用程序的第 一次交互:投票事件响应
1.9更新state和不变性
1.10用Babel插件重构transform-class-properties
2.1计时器应用程序
2.2开始计时器应用程序
2.3将应用程序分解为组件
2.4从头开始构建React应用程序的步骤
2.5第(2)步:构建应用程序的静态版本
2.6第(3)步:确定哪些组件应该是有状态的
2.7第(4)步:确定每个state 应该位于哪个组件中
2.8第(5)步:通过硬编码来初始化state
2.9第(6)步:添加反向数据流
2.10更新计时器
2.11删除计时器
2.12添加计时功能
2.13添加启动和停止功能
3.1组件和服务器介绍
3.2server.js
3.3服务器API
3.4使用API
3.5从服务器加载状态
3.6client
3.7向服务器发送开始和停止请求
3.8向服务器发送创建、更新和删除请求
3.9下一步
4.1React使用了虚拟DOM
4.2为什么不修改实际的DOM
4.3什么是虚拟DOM
4.4虚拟DOM片段
4.5ReactElement
4.6JSX
5.1props、state和children介绍
5.2如何使用本章
5.3ReactComponent
5.4props是参数
5.5PropTypes
5.6使用getDefaultProps()获取默认props
5.7上下文
5.8state
5.9无状态组件
5.10使用props.children与子组件对话
6.1表单101
6.2文本输入
6.3远程数据
6.4异步持久性
6.5Redux
6.6表单模块
7.1JavaScript模块
7.2Create React App
7.3探索Create React App
7.4Webpack基础
7.5对示例应用程序进行修改
7.6创建生产构建
7.7弹出
7.8Create React App和API服务器一起使用
7.9Webpack总结
8.1不使用框架编写测试
8.2Jest是什么
8.3使用Jest
8.4React应用程序的测试策略
8.5使用Enzyme测试基本的React组件
8.6为食物查找应用程序编写测试
8.7编写FoodSearch.test.js
当前位置:
首页>>
技术小册>>
React全家桶--前端开发与实例(上)
小册名称:React全家桶--前端开发与实例(上)
### 6.1 表单101:React中的表单处理基础 在Web开发中,表单是用户与网页交互的核心方式之一,它允许用户输入数据并提交给服务器处理。在React应用中,表单处理是一个常见且重要的任务,但由于React的数据流是单向的(从父组件流向子组件),并且React并不直接操作DOM,这使得表单的处理方式与传统HTML表单处理有所不同。本章“6.1表单101”将带你深入了解React中表单处理的基本原理、常用组件以及实战技巧。 #### 6.1.1 React表单概述 在React中,表单元素(如`<input>`、`<textarea>`、`<select>`等)的工作方式与传统HTML表单相似,但React推荐我们使用状态(state)和事件处理函数来控制表单的输入和行为。React通过状态来追踪输入字段的值,并在表单提交时,将状态中的数据作为请求的一部分发送给服务器。 #### 6.1.2 受控组件(Controlled Components) **受控组件**是React表单处理的核心概念之一。在React中,表单的输入字段(如`<input>`、`<textarea>`等)的值通过React组件的状态(state)来控制,这种组件被称为受控组件。当输入字段的值改变时,一个事件处理函数会被调用,该函数会更新组件的状态,从而反映最新的输入值。 **示例代码**: ```jsx import React, { useState } from 'react'; function ControlledInput() { const [inputValue, setInputValue] = useState(''); const handleInputChange = (e) => { setInputValue(e.target.value); }; return ( <form> <label> Name: <input type="text" value={inputValue} onChange={handleInputChange} /> </label> </form> ); } export default ControlledInput; ``` 在上述示例中,`<input>`元素的值被绑定到组件的状态`inputValue`上,并通过`onChange`事件处理器来更新这个状态。这样,无论何时用户改变输入字段的值,`inputValue`都会实时更新,实现了输入字段的受控。 #### 6.1.3 非受控组件(Uncontrolled Components) 虽然受控组件是React中处理表单的推荐方式,但在某些情况下,你可能更倾向于使用**非受控组件**。非受控组件是指那些其值不由React组件的状态控制的表单元素。通常,这些元素会保留自己的状态(如DOM元素的`value`属性),并且可以通过引用(refs)来访问这些值。 **示例代码**: ```jsx import React, { useRef } from 'react'; function UncontrolledInput() { const inputRef = useRef(null); const handleSubmit = (e) => { e.preventDefault(); console.log(inputRef.current.value); }; return ( <form onSubmit={handleSubmit}> <label> Name: <input type="text" ref={inputRef} /> </label> <button type="submit">Submit</button> </form> ); } export default UncontrolledInput; ``` 在这个例子中,我们使用了`useRef`钩子来创建一个引用,并将其附加到`<input>`元素上。这样,在表单提交时,我们就可以通过引用直接访问到`<input>`元素的值,而无需将其存储在组件的状态中。 #### 6.1.4 表单提交与验证 在React中,表单的提交和验证通常是通过事件处理函数来实现的。你可以为表单元素添加`onSubmit`事件处理器,并在其中编写逻辑来处理表单的提交,比如验证输入字段、阻止表单的默认提交行为(使用`e.preventDefault()`),以及将表单数据发送到服务器。 **表单验证**是确保用户输入符合预期格式的重要步骤。React允许你在`onChange`或`onSubmit`事件处理器中执行验证逻辑,并根据验证结果更新组件的状态或显示错误消息。 **示例代码**(包含简单验证): ```jsx import React, { useState } from 'react'; function FormWithValidation() { const [inputValue, setInputValue] = useState(''); const [error, setError] = useState(''); const handleInputChange = (e) => { const value = e.target.value; setError(value.trim() === '' ? 'Name cannot be empty' : ''); setInputValue(value); }; const handleSubmit = (e) => { e.preventDefault(); if (error) { return; // 不执行提交逻辑,因为存在验证错误 } // 提交表单数据到服务器 console.log('Form submitted with value:', inputValue); }; return ( <form onSubmit={handleSubmit}> <label> Name: <input type="text" value={inputValue} onChange={handleInputChange} /> {error && <p style={{ color: 'red' }}>{error}</p>} </label> <button type="submit">Submit</button> </form> ); } export default FormWithValidation; ``` 在这个例子中,我们添加了一个简单的验证逻辑,当用户输入为空时显示错误信息。同时,如果表单存在验证错误,则不执行提交逻辑。 #### 6.1.5 高级表单处理 随着React应用的复杂性增加,你可能会遇到需要处理多个输入字段、动态表单元素或表单之间的数据共享等场景。在这些情况下,你可以考虑使用React的表单库(如Formik、React Hook Form等),它们提供了丰富的API和强大的功能来简化表单处理。 这些库通常提供了表单验证、表单状态管理、错误处理、以及表单提交的封装,使得开发者可以更加专注于业务逻辑的实现,而不是表单的底层处理。 #### 总结 在React中,表单处理是一个既重要又富有挑战性的任务。通过掌握受控组件、非受控组件、表单提交与验证等基础知识,你可以构建出功能强大且用户体验良好的表单。随着React生态的不断发展,你也可以利用现有的表单库来进一步提升开发效率和代码质量。希望本章的内容能够为你在React中处理表单提供有力的支持。
上一篇:
5.10使用props.children与子组件对话
下一篇:
6.2文本输入
该分类下的相关小册推荐:
ReactJS面试指南
React 进阶实践指南
剑指Reactjs
深入学习React实战进阶
React全家桶--前端开发与实例(下)