SlideShare a Scribd company logo
1 of 40
Download to read offline
React和Flux的组件定制化实践
美团技术团队  王玥
美团  React  专场
摘要
• 可配置的UI组件
• 通过组合开发业务应⽤用
• 静态部分:数据拼接
• 交互部分:Action-Handler组合
可配置的UI组件
思考:UI是什么?
UI是什么?
〈 What UI really is (and how UX confuses matters) 〉
UI是什么?
• 静态部分:
• 有限个组件组合
• 每个组件可以看做:f(props)
• 交互部分:
• 有限个function组合,f(g(action))
可配置组件-基础组件
• 静态部分:表格表头、⾏行列,按钮,模态对话框…以
及UI元素的样式
• 交互部分:click,hover,load
可配置组件-布局组件
• FlowLayout,FlowPanel,GridLayout…
可配置组件-业务组件
• 基础组件和布局组件的组合(可以嵌套业务组件)
• 有业务含义,例如:业务报表,⼯工作台....
• 通过数据源获取配置元数据,例如表头
• 通过数据源获取数据,例如表格的每⼀一⾏行
可配置组件-业务组件
搜索选择
可配置组件-⻚页⾯面组件
搜索选择
可配置组件-总结
• 从静态的⾓角度看
• 把组件们的props⽤用统⼀一的数据结构组合起来
• 从交互的⾓角度看
• 把导致props改变function组合起来
静态部分:数据拼接
静态部分-数据
• 通过静态数据来描述组件
• 组件的render函数中使⽤用需要的props
静态部分-规则
• 按照树形结构组织
• 可能⽆无法⼀一次拿到完整的数据,需要进⾏行拼接
• 不同type的组件实现⾃自⼰己的render⽅方法
• 相同type的组件通过不同的prop产⽣生不同实例
{
"type": "Page",
"props": {
"title": "Demo",
"children": [
{
"type": "PageLayout",
"props": {
"children": [
{
"type": "FlowPanel",
"props": {
"width": "100",
"children": [
{
"type": "FilledButton"
},
{
"type": "TextButton"
}
]
}
}
]
}
}
]
}
}
• Type
• Props
• children
静态部分-数据
{
"type": "TextButton",
"props": {
"style": {
"margin": "5px",
"color": "#655"
},
"children": "click me"
}
}
静态部分-拼接
{
"type": "FlowPanel",
"props": {
"width": "100",
"children": [
{
"type": "FilledButton",
"props": {
"componentId": 1
}
},
{
"type": "TextButton",
"props": {
"componentId": 2
}
}
]
}
}
{
"type": "FilledButton",
"props": {
"style": {
"background": "#000"
},
"children": [
{
"type": "Simple",
"props": {
"field": "name"
}
}
]
}
}
id=1的数据源返回组件元数据
静态部分-拼接
{
"type": "FilledButton",
"props": {
"componentId": 1,
"style": {
"background": "#000"
},
"children": [
{
"type": "Simple",
"props": {
"field": "name"
}
}
]
}
}
{
"name": "test button"
}
componentId=1组件的数据
"type": "FilledButton",
"props": {
"componentId": 1,
"data": {
"name": "test button"
}
//...
静态部分-数据流和context
{
"type": "FilledButton",
"props": {
"componentId": 1,
"data": {
"name": "test button"
},
"style": {
"background": "#000"
},
"children": [
{
"type": "Text",
"props": {
"field": "name"
}
}
]
}
}
test button
{
"type": "FilledButton",
"props": {
"componentId": 1,
"data": {
"name": “hello world"
},
"style": {
"background": "#F00"
},
"children": [
{
"type": "Text",
"props": {
"field": "name"
}
}
]
}
}
hello world
改变组件的数据
改变组件的元数据
静态部分-数据流和context
• 业务组件会从数据源请求需要的数据
• ⾮非业务组件render时将props中的data向下传递
• 业务组件之间存在数据隔离
• 如果业务组件下存在业务组件,数据也是隔离的
静态部分-Store
• ⻚页⾯面的props全部放到⼀一个store中
• Store负责维护props
• 根据组件ID查找
• 根据属性来查找
• 修改props
交互部分:函数组合
交互部分
• 静态数据的描述能⼒力越强,解析越复杂
• 函数不如静态数据直观,但更加灵活
• 通过函数组合去修改props实现交互部分
• 例如获取链接地址,⽇日期控件设置初始值
交互部分-规则
• 可以配对的Action-Handler
• 定义多个函数之间数据传递过程中的中间对象:
action
• 业务组件通过context来包装基础组件的action
• 函数actionCreator根据业务逻辑和raw action去产
⽣生传递给handler的action
• 函数actionHandler根据action修改props
交互部分-action
• pipe: cat * | grep "Linux" | grep -v "UNIX" | wc -l
• 数据传递可能存在差异
• action是函数组合的纽带
交互部分-action
搜索选择
{
"actionType": "FILTER_CHANGE",
"name": "type",
"value": 1
}
交互部分-action
test button
click
test button
click
test button
{
actionType: 'FILLED_BUTTON_CLICK'
}
{
actionType: 'FILLED_BUTTON_CLICK',
dataId: 1
}
搜索选择
select的onAction
业务组件的onAction
App的onAction
{
"actionType": "FILTER_CHANGE",
"name": "type",
"value": 1
}
{
"actionType": "FILTER_CHANGE",
"name": "type",
"value": 1,
"componentId": 2,
"componentType": "select"
}
ActionCreator
• action不是总能满⾜足业务需要
• 函数的描述能⼒力更强
• 能够添加业务逻辑代码 => f(g((action)))
• action通过actionCreator得到改变props的action
ActionHandler
• Store为不同类型的action添加handler
• Handler中修改store中的props(⻚页⾯面的props都在
store中)
• Handler中通知props变化
总结
组合⽣生产App
组件
raw action
actionCreator actionHandler
action
store
更新props
change
action
(业务逻辑,可配置)
(业务逻辑,
可配置)
(props可配置)
组合⽣生产App
App业务组件基础组件
action
⻚页⾯面
action’ action’’
App
props
⻚页⾯面 业务组件
内置action
基础组件
props’ props’.data
Action的流动
Data的流动
props’’
搜索选择 搜索类型1
UI是什么?
搜索选择 搜索类型1
f : actionCreator(action)(actionHandler)(store)
f(props)
⼀一些Flux框架
• Redux
• Reflux
Q&A
We shall not cease from exploration
And the end of all our exploring
Will be to arrive where we started
And know the place for the first time.
— T. S. Eliot
欢迎关注美团技术团队获取更多优质技术内容

More Related Content

More from 美团点评技术团队

美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡美团点评技术团队
 
美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统美团点评技术团队
 
美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙14美团云-Docker平台美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙14美团云-Docker平台美团点评技术团队
 
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术团队
 
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术团队
 
美团点评技术沙龙13-点评Titans框架的设计和实践
美团点评技术沙龙13-点评Titans框架的设计和实践美团点评技术沙龙13-点评Titans框架的设计和实践
美团点评技术沙龙13-点评Titans框架的设计和实践美团点评技术团队
 
美团点评沙龙12-LBS空间搜索架构的优化历程
美团点评沙龙12-LBS空间搜索架构的优化历程美团点评沙龙12-LBS空间搜索架构的优化历程
美团点评沙龙12-LBS空间搜索架构的优化历程美团点评技术团队
 
美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践美团点评技术团队
 
美团点评沙龙012-初创电商的物流摸索
美团点评沙龙012-初创电商的物流摸索美团点评沙龙012-初创电商的物流摸索
美团点评沙龙012-初创电商的物流摸索美团点评技术团队
 
美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路
美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路
美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路美团点评技术团队
 
美团点评技术沙龙011 - 团购系统流量和容量评估实践
美团点评技术沙龙011 - 团购系统流量和容量评估实践美团点评技术沙龙011 - 团购系统流量和容量评估实践
美团点评技术沙龙011 - 团购系统流量和容量评估实践美团点评技术团队
 
美团点评技术沙龙011 - 客户端用户体验数据量化
美团点评技术沙龙011 - 客户端用户体验数据量化美团点评技术沙龙011 - 客户端用户体验数据量化
美团点评技术沙龙011 - 客户端用户体验数据量化美团点评技术团队
 
美团点评技术沙龙011 - 移动app兼容性测试工具Spider
美团点评技术沙龙011 - 移动app兼容性测试工具Spider 美团点评技术沙龙011 - 移动app兼容性测试工具Spider
美团点评技术沙龙011 - 移动app兼容性测试工具Spider 美团点评技术团队
 
美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践美团点评技术团队
 
美团点评技术沙龙010-点评RDS系统介绍
美团点评技术沙龙010-点评RDS系统介绍美团点评技术沙龙010-点评RDS系统介绍
美团点评技术沙龙010-点评RDS系统介绍美团点评技术团队
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术团队
 
美团点评技术沙龙010-美团数据库自动化运维系统构建之路
美团点评技术沙龙010-美团数据库自动化运维系统构建之路美团点评技术沙龙010-美团数据库自动化运维系统构建之路
美团点评技术沙龙010-美团数据库自动化运维系统构建之路美团点评技术团队
 
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化美团点评技术团队
 
美团点评技术沙龙09 - 美团配送智能调度实践
美团点评技术沙龙09 - 美团配送智能调度实践美团点评技术沙龙09 - 美团配送智能调度实践
美团点评技术沙龙09 - 美团配送智能调度实践美团点评技术团队
 
美团点评技术沙龙09 - 外卖O2O的用户画像实践
美团点评技术沙龙09 - 外卖O2O的用户画像实践美团点评技术沙龙09 - 外卖O2O的用户画像实践
美团点评技术沙龙09 - 外卖O2O的用户画像实践美团点评技术团队
 

More from 美团点评技术团队 (20)

美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡
 
美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统
 
美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙14美团云-Docker平台美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙14美团云-Docker平台
 
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
 
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
 
美团点评技术沙龙13-点评Titans框架的设计和实践
美团点评技术沙龙13-点评Titans框架的设计和实践美团点评技术沙龙13-点评Titans框架的设计和实践
美团点评技术沙龙13-点评Titans框架的设计和实践
 
美团点评沙龙12-LBS空间搜索架构的优化历程
美团点评沙龙12-LBS空间搜索架构的优化历程美团点评沙龙12-LBS空间搜索架构的优化历程
美团点评沙龙12-LBS空间搜索架构的优化历程
 
美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践
 
美团点评沙龙012-初创电商的物流摸索
美团点评沙龙012-初创电商的物流摸索美团点评沙龙012-初创电商的物流摸索
美团点评沙龙012-初创电商的物流摸索
 
美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路
美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路
美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路
 
美团点评技术沙龙011 - 团购系统流量和容量评估实践
美团点评技术沙龙011 - 团购系统流量和容量评估实践美团点评技术沙龙011 - 团购系统流量和容量评估实践
美团点评技术沙龙011 - 团购系统流量和容量评估实践
 
美团点评技术沙龙011 - 客户端用户体验数据量化
美团点评技术沙龙011 - 客户端用户体验数据量化美团点评技术沙龙011 - 客户端用户体验数据量化
美团点评技术沙龙011 - 客户端用户体验数据量化
 
美团点评技术沙龙011 - 移动app兼容性测试工具Spider
美团点评技术沙龙011 - 移动app兼容性测试工具Spider 美团点评技术沙龙011 - 移动app兼容性测试工具Spider
美团点评技术沙龙011 - 移动app兼容性测试工具Spider
 
美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践
 
美团点评技术沙龙010-点评RDS系统介绍
美团点评技术沙龙010-点评RDS系统介绍美团点评技术沙龙010-点评RDS系统介绍
美团点评技术沙龙010-点评RDS系统介绍
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
 
美团点评技术沙龙010-美团数据库自动化运维系统构建之路
美团点评技术沙龙010-美团数据库自动化运维系统构建之路美团点评技术沙龙010-美团数据库自动化运维系统构建之路
美团点评技术沙龙010-美团数据库自动化运维系统构建之路
 
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化
 
美团点评技术沙龙09 - 美团配送智能调度实践
美团点评技术沙龙09 - 美团配送智能调度实践美团点评技术沙龙09 - 美团配送智能调度实践
美团点评技术沙龙09 - 美团配送智能调度实践
 
美团点评技术沙龙09 - 外卖O2O的用户画像实践
美团点评技术沙龙09 - 外卖O2O的用户画像实践美团点评技术沙龙09 - 外卖O2O的用户画像实践
美团点评技术沙龙09 - 外卖O2O的用户画像实践
 

W3CTech美团react专场- React和 Flux 的组件定制化实践