首页
技术小册
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全家桶--前端开发与实例(上)
### 4.2 为什么不修改实际的DOM 在深入探讨React及其“全家桶”在前端开发中的应用时,一个核心概念不容忽视——React不直接修改DOM。这一设计哲学不仅深刻影响了React的性能表现,也极大地简化了前端开发者的心智负担。本节将详细阐述React为何选择不直接操作DOM,以及这一决策背后的技术原理、优势和应用实践。 #### 4.2.1 DOM操作的代价 首先,我们需要理解为何直接操作DOM(Document Object Model,文档对象模型)在前端开发中往往被视为高成本操作。DOM是浏览器内部表示网页内容的数据结构,每当我们通过JavaScript修改DOM时,浏览器都需要重新计算页面的布局、重新绘制和重排(reflow/relayout)部分或全部元素,以确保页面内容的正确显示。这些操作是计算密集型的,特别是在处理复杂页面或频繁更新UI时,会显著影响页面性能,导致卡顿、延迟等用户体验问题。 #### 4.2.2 React的虚拟DOM策略 为了减轻DOM操作的负担,React引入了虚拟DOM(Virtual DOM)的概念。虚拟DOM是真实DOM的一个内存表示,React在JavaScript中维护了一个这样的数据结构,用于追踪页面上DOM的状态。当React组件的状态或属性发生变化时,它首先会在虚拟DOM中反映这些变化,而不是直接修改实际的DOM。接下来,React会比较新旧两个虚拟DOM树之间的差异,并计算出最小化的DOM更新集合。只有那些真正需要改变的部分才会被应用到真实的DOM上,从而极大地减少了不必要的DOM操作,提高了应用的性能。 #### 4.2.3 虚拟DOM的优势 1. **性能优化**:通过减少DOM操作次数,React能够有效提升应用的渲染性能。尤其是当页面结构复杂、更新频繁时,虚拟DOM的优势更加明显。 2. **跨平台**:虚拟DOM让React能够轻松实现跨平台渲染。React Native就是利用React的虚拟DOM概念,将React组件渲染到原生移动应用平台上,实现了“一次编写,到处运行”的目标。 3. **简化开发**:开发者无需直接面对复杂的DOM操作,只需关注组件的逻辑和状态管理,降低了开发难度和出错率。 4. **高效的UI更新**:React通过虚拟DOM的diff算法,能够精确计算出哪些DOM节点需要被更新,哪些可以保持不变,从而实现了高效的UI更新。 #### 4.2.4 React中的组件更新机制 在React中,组件的更新过程可以概括为以下几个步骤: 1. **状态或属性变化**:当组件的状态(state)或传递给组件的属性(props)发生变化时,React会触发组件的重新渲染。 2. **生成新的虚拟DOM**:React会根据组件的当前状态或属性,生成一个新的虚拟DOM树。 3. **比较差异**:React使用高效的diff算法比较新旧两个虚拟DOM树,找出它们之间的差异。 4. **执行DOM更新**:基于比较结果,React计算出最小化的DOM更新集合,并只将这些变更应用到实际的DOM上。 5. **回调与生命周期**:在DOM更新完成后,React会触发相应的生命周期方法或回调函数,允许开发者执行一些后续操作,如数据请求、动画等。 #### 4.2.5 实践中的注意事项 尽管React的虚拟DOM机制极大地提升了开发效率和性能,但在实际开发中仍需注意以下几点: - **避免不必要的重渲染**:通过React.memo、shouldComponentUpdate等方法,避免在组件状态或属性未实际变化时触发重渲染。 - **优化列表渲染**:使用React.Fragment、key属性等技巧,优化列表或集合的渲染性能。 - **合理利用生命周期和Hooks**:在类组件中合理利用生命周期方法,在函数组件中合理使用Hooks,如useEffect、useMemo等,以提高组件的性能和响应性。 - **关注性能瓶颈**:使用开发者工具(如React DevTools)监控组件的渲染性能,识别并优化性能瓶颈。 #### 4.2.6 结论 React选择不直接修改实际DOM,而是采用虚拟DOM的策略,是基于对DOM操作代价的深刻理解和前端性能优化的需求。这一设计不仅提升了React应用的渲染性能,也简化了前端开发流程,降低了开发难度。通过合理利用React的虚拟DOM机制和组件更新机制,开发者可以构建出高性能、可维护性强的前端应用。在未来的前端开发中,随着React及其生态的不断发展,虚拟DOM的概念和优势将会得到更加广泛的应用和深化。
上一篇:
4.1React使用了虚拟DOM
下一篇:
4.3什么是虚拟DOM
该分类下的相关小册推荐:
ReactJS面试指南
剑指Reactjs
React全家桶--前端开发与实例(下)
React 进阶实践指南
深入学习React实战进阶