首页
技术小册
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.2 文本输入 在Web开发中,文本输入是用户与网页交互最基本也是最重要的方式之一。在React应用中,处理文本输入不仅关乎用户界面的友好性,还直接影响到应用的数据流管理和状态更新。本章节将深入探讨React中处理文本输入的各种方式,包括受控组件(Controlled Components)与非受控组件(Uncontrolled Components)的概念、实现方法、适用场景,以及如何利用Hooks(如`useState`和`useEffect`)来优化文本输入的处理。 #### 6.2.1 理解受控组件与非受控组件 **受控组件(Controlled Components)**:在React中,受控组件是指那些其值由React组件的state控制的输入元素(如`<input>`, `<textarea>`, `<select>`等)。每当表单字段发生变化时,都会通过事件处理器来更新组件的state,从而反映出表单字段的最新值。这种方式使得组件的state成为“单一事实来源”(Single Source of Truth),有利于数据的集中管理和预测组件的行为。 **非受控组件(Uncontrolled Components)**:相对于受控组件,非受控组件的值不由React组件的state控制,而是由DOM本身维护。这类组件的值变化不会直接更新组件的state,而是在需要时通过引用(ref)来读取DOM元素的值。非受控组件在React中较少使用,但在某些场景下(如集成第三方UI库时),它们可能更为方便。 #### 6.2.2 实现受控文本输入 在React中实现受控文本输入,关键在于将输入元素的值(`value`)绑定到组件的state上,并通过事件处理函数(如`onChange`)来更新这个state。以下是一个简单的受控文本输入的实现示例: ```jsx import React, { useState } from 'react'; function ControlledTextInput() { const [value, setValue] = useState(''); const handleChange = (event) => { setValue(event.target.value); }; return ( <div> <label> 受控文本输入: <input type="text" value={value} onChange={handleChange} /> </label> <p>输入的内容是: {value}</p> </div> ); } export default ControlledTextInput; ``` 在这个例子中,`<input>`元素的`value`属性被绑定到了`value`这个state上,每当用户在输入框中输入内容时,`onChange`事件处理器就会被触发,通过`event.target.value`获取到最新的输入值,并使用`setValue`函数来更新`value`这个state。这样,输入框的值就始终与组件的state保持同步,实现了受控组件的功能。 #### 6.2.3 处理非受控文本输入 虽然非受控组件在React中不是主流,但在某些情况下,如集成第三方库或处理大量表单字段时,它们可能会更加便捷。使用`ref`是处理非受控组件的主要方式。以下是一个非受控文本输入的示例: ```jsx import React, { useRef } from 'react'; function UncontrolledTextInput() { const inputRef = useRef(null); const handleSubmit = (event) => { event.preventDefault(); console.log(inputRef.current.value); // 获取输入框的值 }; return ( <form onSubmit={handleSubmit}> <label> 非受控文本输入: <input type="text" ref={inputRef} /> </label> <button type="submit">提交</button> </form> ); } export default UncontrolledTextInput; ``` 在这个例子中,我们使用了`useRef` Hook来创建一个引用(ref),并将其赋值给`<input>`元素的`ref`属性。这样,我们就可以通过`inputRef.current`来访问DOM元素了。在表单提交时,我们通过`inputRef.current.value`来获取输入框的值,并进行了相应的处理(这里仅仅是打印到了控制台)。 #### 6.2.4 进一步优化:使用Hooks处理复杂场景 在实际应用中,文本输入的处理可能会涉及更复杂的逻辑,比如验证输入内容、格式化文本、限制输入长度等。这时,我们可以利用React Hooks来编写更加灵活和可复用的逻辑。 例如,我们可以使用`useState`和`useEffect`来创建一个带有输入验证的受控组件: ```jsx import React, { useState, useEffect } from 'react'; function ValidatedTextInput() { const [value, setValue] = useState(''); const [error, setError] = useState(''); useEffect(() => { if (!value.trim()) { setError('输入不能为空!'); } else if (value.length < 5) { setError('输入长度不能少于5个字符!'); } else { setError(''); } }, [value]); const handleChange = (event) => { setValue(event.target.value); }; return ( <div> <label> 验证文本输入: <input type="text" value={value} onChange={handleChange} /> </label> {error && <p style={{ color: 'red' }}>{error}</p>} </div> ); } export default ValidatedTextInput; ``` 在这个例子中,我们使用了`useState`来管理输入值和错误信息,同时使用了`useEffect`来监听输入值的变化,并执行相应的验证逻辑。如果输入值不满足条件,则通过`setError`来更新错误信息,并在UI中显示出来。 #### 6.2.5 小结 文本输入是React应用中常见的交互方式,通过受控组件和非受控组件的方式,我们可以灵活地处理用户的输入。受控组件提供了对输入值的完全控制,适合需要精确控制表单字段状态的场景;而非受控组件则在某些特定情况下(如集成第三方库时)更为方便。此外,利用React Hooks,我们可以编写出更加灵活和可复用的逻辑来处理复杂的输入验证、格式化等需求。在实际开发中,应根据具体需求选择合适的方式来处理文本输入。
上一篇:
6.1表单101
下一篇:
6.3远程数据
该分类下的相关小册推荐:
ReactJS面试指南
React 进阶实践指南
深入学习React实战进阶
剑指Reactjs
React全家桶--前端开发与实例(下)