SlideShare a Scribd company logo
1 of 28
Download to read offline
REACT 从⼊入⻔门到实践
组件开发
主要内容
• 参考 Thinking in React 开发 Filter Table
• 拆分组件的规则
• props 和 state 的最佳实践
• 单向数据流是如何构建的
Filter Table
• 具有搜索功能的产品表格⻚页
• 设计稿和接⼝口⽂文档已经给出
• 需要实现的效果
Filter Table
第⼀一步:按层级拆分组件
• 单⼀一职责原则
• UI 和组件层级对应
第⼆二步:开发静态版本
• 不⽤用 state,只⽤用 props
• 数据放在最顶层的组件中
• 构建应⽤用的顺序
第⼆二步:开发静态版本
第⼆二步:开发静态版本
第⼆二步:开发静态版本
第⼆二步:开发静态版本
第⼆二步:开发静态版本
第⼆二步:开发静态版本
第三步:分析需要的最少量
(但是完备)state
• 状态越少越好维护
• ⽐比如 TodoList 显⽰示总条数
第三步:分析需要的最少量
(但是完备)state
• 原始产品数组
• ⽤用户输⼊入的关键字
• 复选框的状态
• 过滤之后的产品数组
第三步:分析需要的最少量
(但是完备)state
• 它是从⽗父级传过来的吗?
• 它会经常改变吗?
• 它能通过其他 `state` 和 `props` 计算出来吗?
第三步:分析需要的最少量
(但是完备)state
• 如果它是从⽗父级传过来的,那么它就不是⼀一个
state
• 如果它会经常改变,那么它应该是⼀一个 state
• 如果它能通过其他 state 和 props 计算出来,那
么它不是⼀一个 state
• 原始 products 列表
• ⽤用户输⼊入的搜索词
• 复选框的值
• 过滤后的 products 列表
第三步:分析需要的最少量
(但是完备)state
第四步:分析 state 应该属于哪个组件
• 最具有挑战性的⼀一步
第四步:分析 state 应该属于哪个组件
• 找到所有需要⽤用到这个 state 的组件
• 找到他们的公共祖先组件
• 此组件或者它的祖先组件应该拥有这个 state
• 如果找不到合适的,可以创建⼀一个新的组件,它
包含了所有⽤用到这个 state 的组件
第四步:分析 state 应该属于哪个组件
• FilterableProductTable 需要⽤用到 state 来展⽰示过
滤后的产品
• SearchBar 需要⽤用到 state 来展⽰示搜索内容和复选
框状态
• 它们的共同祖先组件是 FilterableProductTable
第四步:分析 state 应该属于哪个组件
第四步:分析 state 应该属于哪个组件
第四步:分析 state 应该属于哪个组件
第四步:分析 state 应该属于哪个组件
第五步:构建反向数据流
• 将搜索框和复选框的改变通知给
FilterableProductTable
• ⼦子组件 -> ⽗父组件 -> ⼦子组件
第五步:构建反向数据流
第五步:构建反向数据流
总结
• 按层级划分组件
• state 最好尽可能少(但是需要完备)
• 理解单向数据流的含义,以及如何应⽤用

More Related Content

Similar to React 组件开发

Jira live demo 2017
Jira live demo 2017Jira live demo 2017
Jira live demo 2017Linktech
 
JIRA Live DEMO 2020 v17
JIRA Live DEMO 2020 v17JIRA Live DEMO 2020 v17
JIRA Live DEMO 2020 v17Linktech
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping ToolSouyi Yang
 
Drupal7第三堂
Drupal7第三堂Drupal7第三堂
Drupal7第三堂Hen Chen
 
20120516 axure rp prototype design outline
20120516 axure rp prototype design outline20120516 axure rp prototype design outline
20120516 axure rp prototype design outlineturtleknight
 
同济优秀课程设计 - 软件测试报告
同济优秀课程设计 - 软件测试报告同济优秀课程设计 - 软件测试报告
同济优秀课程设计 - 软件测试报告Kerry Zhu
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超drewz lin
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011Ching Yi Chan
 
我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離Edward Kuo
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践LC2009
 
BB04-006-02
BB04-006-02BB04-006-02
BB04-006-025045033
 
Build your ETL job using Jenkins - step by step
Build your ETL job using Jenkins - step by stepBuild your ETL job using Jenkins - step by step
Build your ETL job using Jenkins - step by stepBryan Yang
 
用户体验的 要素 很好的资料
用户体验的 要素 很好的资料用户体验的 要素 很好的资料
用户体验的 要素 很好的资料grey0511
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationnetdbncku
 
Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器
Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器
Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器iflytek
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1netdbncku
 

Similar to React 组件开发 (20)

Jira live demo 2017
Jira live demo 2017Jira live demo 2017
Jira live demo 2017
 
JIRA Live DEMO 2020 v17
JIRA Live DEMO 2020 v17JIRA Live DEMO 2020 v17
JIRA Live DEMO 2020 v17
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping Tool
 
Drupal7第三堂
Drupal7第三堂Drupal7第三堂
Drupal7第三堂
 
20120516 axure rp prototype design outline
20120516 axure rp prototype design outline20120516 axure rp prototype design outline
20120516 axure rp prototype design outline
 
同济优秀课程设计 - 软件测试报告
同济优秀课程设计 - 软件测试报告同济优秀课程设计 - 软件测试报告
同济优秀课程设计 - 软件测试报告
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
 
我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離
 
Xpp
XppXpp
Xpp
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践
 
BB04-006-02
BB04-006-02BB04-006-02
BB04-006-02
 
Build your ETL job using Jenkins - step by step
Build your ETL job using Jenkins - step by stepBuild your ETL job using Jenkins - step by step
Build your ETL job using Jenkins - step by step
 
用户体验的 要素 很好的资料
用户体验的 要素 很好的资料用户体验的 要素 很好的资料
用户体验的 要素 很好的资料
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器
Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器
Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
 

React 组件开发