首页
技术小册
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全家桶--前端开发与实例(上)
### 2.2 开始计时器应用程序 在React全家桶的广阔世界中,构建一个简单的计时器应用程序是理解React状态管理、组件化以及事件处理机制的绝佳起点。本章节将引领你一步步从零开始,设计并实现一个功能完善的计时器应用,涵盖启动、暂停、继续和重置等核心功能。我们将通过实践来深入理解React的核心概念,包括组件的创建、props与state的使用,以及如何使用React Hooks来增强组件的功能。 #### 2.2.1 项目初始化 首先,确保你的开发环境中已经安装了Node.js和npm(或yarn)。然后,我们将使用Create React App来快速搭建项目框架。在命令行中执行以下命令来创建一个新项目: ```bash npx create-react-app timer-app cd timer-app npm start ``` 这些命令会创建一个名为`timer-app`的新React项目,并启动开发服务器。现在,你可以通过浏览器访问`http://localhost:3000/`来查看你的应用初始界面。 #### 2.2.2 设计计时器组件 计时器应用的核心是一个能够显示时间并响应用户操作的组件。我们将这个组件命名为`Timer`。在`src`目录下创建一个新的文件夹`components`,并在其中创建`Timer.js`文件。 ##### Timer.js ```jsx import React, { useState } from 'react'; function Timer() { const [seconds, setSeconds] = useState(0); const [isRunning, setIsRunning] = useState(false); const startTimer = () => { if (!isRunning) { setIsRunning(true); const interval = setInterval(() => { if (isRunning) { setSeconds(prevSeconds => prevSeconds + 1); } }, 1000); // 清理函数,用于组件卸载时停止计时器 return () => clearInterval(interval); } }; const pauseTimer = () => { setIsRunning(false); }; const resetTimer = () => { setIsRunning(false); setSeconds(0); }; // 使用useEffect来管理副作用(如计时器) React.useEffect(() => { let intervalId = null; if (isRunning) { intervalId = setInterval(() => { setSeconds(prevSeconds => prevSeconds + 1); }, 1000); } // 清理函数 return () => clearInterval(intervalId); }, [isRunning]); // 依赖项数组,确保仅当isRunning变化时重新执行 return ( <div> <h1>计时器:{seconds} 秒</h1> <button onClick={startTimer} disabled={isRunning}>开始</button> <button onClick={pauseTimer} disabled={!isRunning}>暂停</button> <button onClick={resetTimer}>重置</button> </div> ); } export default Timer; ``` 注意:上述代码中,我们首先在`useState`中定义了两个状态变量`seconds`和`isRunning`,分别用于跟踪计时器的秒数和运行状态。然后,我们定义了三个函数`startTimer`、`pauseTimer`和`resetTimer`来处理用户的不同操作。 然而,在`startTimer`函数中直接使用`setInterval`可能会导致内存泄漏,因为如果在组件卸载前没有清除定时器,定时器仍会继续执行。为了解决这个问题,我们使用了`useEffect` Hook来管理定时器的创建和清理工作。注意,我们在`useEffect`的依赖项数组中包含了`isRunning`,这样每当`isRunning`的值变化时,`useEffect`就会重新执行,从而根据新的状态来设置或清除定时器。 #### 2.2.3 将Timer组件集成到App中 现在,我们已经完成了`Timer`组件的开发,接下来需要将其集成到应用的根组件`App.js`中。 ##### App.js ```jsx import React from 'react'; import './App.css'; import Timer from './components/Timer'; function App() { return ( <div className="App"> <header className="App-header"> <h1>React全家桶 - 计时器应用程序</h1> <Timer /> </header> </div> ); } export default App; ``` 在这个例子中,我们简单地导入了`Timer`组件,并在`App`组件的返回语句中将其渲染到页面上。同时,我们还添加了一个标题来标识这个应用。 #### 2.2.4 样式与布局(可选) 虽然本章节的重点在于React的逻辑实现,但为了提升用户体验,你可以使用CSS为`Timer`组件添加一些样式。在`src`目录下创建一个`App.css`(如果尚未存在)或`Timer.css`文件,并添加一些基本的样式规则。 ##### Timer.css(示例) ```css .timer-container { text-align: center; margin-top: 50px; } .timer-container button { margin: 10px; padding: 10px 20px; font-size: 16px; cursor: pointer; } .timer-container h1 { font-size: 2em; margin-bottom: 20px; } ``` 然后,在`Timer.js`中引入这个CSS文件并应用相应的类名。 #### 2.2.5 总结与扩展 在本章节中,我们构建了一个简单的React计时器应用程序,通过实践深入理解了React的状态管理、组件化、事件处理以及Hooks的使用。这个基础应用可以进一步扩展,比如添加倒计时功能、调整时间间隔、显示更详细的时间信息(如小时和分钟)或者集成到更复杂的应用场景中。 此外,通过本章节的学习,你应该能够开始思考如何将React的其他特性(如路由、表单处理、状态管理库如Redux或Context API)应用到你的项目中,以构建更加复杂和强大的前端应用。React全家桶提供了丰富的工具和库,帮助你高效开发高质量的Web应用,期待你在未来的学习和实践中不断探索和发现。
上一篇:
2.1计时器应用程序
下一篇:
2.3将应用程序分解为组件
该分类下的相关小册推荐:
ReactJS面试指南
React全家桶--前端开发与实例(下)
React 进阶实践指南
剑指Reactjs
深入学习React实战进阶