Thinking in React
美团技术团队  陈益国
美团  React  专场
⺫⽬目录
1. 拥抱未来
2. 设计原则
3. ⾼高性能
4. ⽣生态圈
拥抱未来
React or Web Components
Hello world of Web Component
<hello-world></hello-world>
Hello world of React
<HelloWorld></HelloWorld>
Web Components React
• 封装性(Shadow DOM)
• 可移植性(原⽣生⽀支持)
• ⾼高性能(Vitural DOM)
• 松耦合
React or + Web Components
同构
“⼀一次编写,多处运⾏行”
Client + Server Rendering
• 更好的⽤用户体验
• 可维护性
• SEO
ES6(2015) & ES7(2016)
Classes、static、Arrow Function
class HelloWorld extends React.Component {
constructor (props) {
super(props);
this.state = { name: 'mxTeam' };
}
sayHello = () => {
console.log(`Hello ${this.state.name}`);
}
static defaultProps = {
content: 'World!'
};
render () {
return (
<div onClick={this.sayHello}>Hello {this.props.content}</div>
)
}
};
设计原则
JSX
var myDivElement = <div className="foo" />;
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
Render a HTML tag
Render a Component
状态机
“抛弃繁琐的DOM操作,仅需维护数据的状态”
⼀一个下拉菜单的两种状态
state: 收起 state: 展开
visible: false
visible: true
click
setState
update UI
初始化
渲染
装载
更新
卸载
⽣生命周期
设计原则
• 化繁为简
• 可预测性
• 单向数据流
⾼高性能
当我们谈论 JavaScript 慢的时候,我们都在谈论些什么
Virtural DOM
Create ReactElement(Virutal DOM)
var root = React.createElement('div');
var root = (
<div></div>
);
ReactElement {
type: 'div',
ref: null,
key: null,
props: Object
}
4 个简单的属性,没有 prototype
通过 React.render 将 ReactElement 渲染成常规的 DOM
Diff
同层级 diff
node类型 <div /> <span />
component类型 <Header /> <Content />
attribute <div foo=“bar” /> <div foo=“biz” />
style
<div style={{color:’#666’}} />
<div style={{fontWeight:’bold’}} />
列表 diff
<ul>
<li>a</li>
<li>b</li>
<li>d</li>
<li>e</li>
<ul>
<ul>
<li>a</li>
<li>b</li>
<li>d</li>
<li>e</li>
<li>c</li>
<ul>
<ul>
<li key=“a”>a</li>
<li key=“b”>b</li>
<li key=“c”>c</li>
<li key=“d”>d</li>
<li key=“e”>e</li>
<ul>
key is key
Render
this.state = {
foo: null
};
...
this.setState({
foo: 'bar'
});
console.log(this.state.foo); // null
为什么 setState 是⼀一个异步操作
批量操作
Render 流程
标记 dirty 重新 render ⼦子树
shouldComponentUpdate: function (nextProps, nextState) {
// return nextProps.id === this.props.id;
// return nextState.id === this.state.id;
}
shouldComponentUpdate
更优的 事件代理
• 绑定⾄至⽂文档的根节点
• 仅迭代组件的根节点
⽣生态圈
双向绑定 VS 单向数据流
• 脏检查 & Object.observe
• 复杂度⾼高,数据不可预测
• setState & immutable
• 简单清晰,数据可预测
Flux
Flux 的流程结构
• Action ⽤用户交互、数据交互都是⼀一个Action
• Dispatcher 分发动作给 Store
• Store 数据存储中⼼心,响应 Action,对数据进⾏行修改
• View 监听数据变化的事件,从 Store 获取数据,触发 Action
• Flux
• Reflux
• Redux
• …
R
W3CTech美团react专场-Thinking in React
class FriendInfo {
statics = {
queries: {
user () {
return graphql `
User {
name,
mutual_friends { count }
}
`;
}
}
};
render () {
var user = this.props.user;
return (
<div>
<span>{user.name}</span>
<span>{user.mutual_friends.count} mutual friends</span>
</div>
);
}
};
跨平台/终端
Thanks & End
欢迎关注美团技术团队获取更多优质技术内容

More Related Content

PDF
W3CTech美团react专场-React Native 初探
PDF
美团点评技术沙龙05 - 前后端联调方案探索与应用
PDF
美团点评技术沙龙14美团云-Docker平台
PDF
美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践
PPTX
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
PDF
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
PPTX
Frontend Devops at Cloudinsight
PPTX
宅學習 Firebase
W3CTech美团react专场-React Native 初探
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
Frontend Devops at Cloudinsight
宅學習 Firebase

What's hot (20)

PPTX
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
PPTX
ASP.NET Core 6.0 全新功能探索
PPTX
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
PPTX
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
PPTX
AKS 與開發人員體驗 (Kubernetes 大講堂)
PPTX
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
PDF
美团点评技术沙龙06 - 提高移动端兼容性测试效率工具
PPTX
Asp.net core v1.0
PDF
Train.IO 【第六期-OpenStack 二三事】
PDF
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
PDF
美团技术团队 - KVM性能优化
PPTX
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
PDF
Nodejs & NAE
PDF
百度前端性能监控与优化实践
PPTX
使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016)
PPTX
Angular 5 全新功能探索 @ JSDC2017
PDF
前端编译平台
PPTX
Micro-frontends with Angular 10 (Modern Web 2020)
PPTX
Angular 4 新手入門攻略完全制霸
PPTX
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
ASP.NET Core 6.0 全新功能探索
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
AKS 與開發人員體驗 (Kubernetes 大講堂)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
美团点评技术沙龙06 - 提高移动端兼容性测试效率工具
Asp.net core v1.0
Train.IO 【第六期-OpenStack 二三事】
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团技术团队 - KVM性能优化
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
Nodejs & NAE
百度前端性能监控与优化实践
使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016)
Angular 5 全新功能探索 @ JSDC2017
前端编译平台
Micro-frontends with Angular 10 (Modern Web 2020)
Angular 4 新手入門攻略完全制霸
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
Ad

Viewers also liked (16)

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

Similar to W3CTech美团react专场-Thinking in React (20)

PPT
Html5和css3入门
PDF
ASP.Net MVC2 简介
PPTX
twMVC#01 | ASP.NET MVC 的第一次親密接觸
PDF
全栈三个月开发绩效系统 using Rails 7.1 to develop people performance evaluation system
PPT
建站大业,实战ASP.NET 4
PPTX
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
PPTX
前端MVC之backbone
PDF
2011 JavaTwo JSF 2.0
PPTX
浅析浏览器解析和渲染
PDF
ASP.NET Core 2.1設計新思維與新發展
PDF
Hello reactJS 0~1 Bulid my first web app
PPTX
前端性能测试
PDF
Struts+Spring+Hibernate整合教程
PDF
Struts+Spring+Hibernate整合教程
PPT
Terracotta And Continuent Based Clustering Architecture
PPT
Html5
PPT
Node.js在淘宝的应用实践
PPTX
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
PDF
Vue ithome
PDF
Real World ASP.NET MVC
Html5和css3入门
ASP.Net MVC2 简介
twMVC#01 | ASP.NET MVC 的第一次親密接觸
全栈三个月开发绩效系统 using Rails 7.1 to develop people performance evaluation system
建站大业,实战ASP.NET 4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
前端MVC之backbone
2011 JavaTwo JSF 2.0
浅析浏览器解析和渲染
ASP.NET Core 2.1設計新思維與新發展
Hello reactJS 0~1 Bulid my first web app
前端性能测试
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
Terracotta And Continuent Based Clustering Architecture
Html5
Node.js在淘宝的应用实践
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Vue ithome
Real World ASP.NET MVC

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

PDF
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化
PDF
美团点评技术沙龙09 - 美团配送智能调度实践
PDF
美团点评技术沙龙09 - 外卖O2O的用户画像实践
PDF
美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现
PDF
美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统
PDF
2.美团点评技术沙龙08 微服务是银弹么
PDF
美团点评技术沙龙08 - 分布式监控系统实践
PDF
美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践
PDF
美团点评技术沙龙07 - 外卖后端端技术架构
PDF
美团点评技术沙龙07 - 外卖订单系统架构演进与实践
PDF
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践
PDF
美团点评技术沙龙07 - 美团配送平台高可用实践
PDF
美团点评技术沙龙06 - 美团外卖全链路性能测试实践
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化
美团点评技术沙龙09 - 美团配送智能调度实践
美团点评技术沙龙09 - 外卖O2O的用户画像实践
美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现
美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统
2.美团点评技术沙龙08 微服务是银弹么
美团点评技术沙龙08 - 分布式监控系统实践
美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践
美团点评技术沙龙07 - 外卖后端端技术架构
美团点评技术沙龙07 - 外卖订单系统架构演进与实践
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践
美团点评技术沙龙07 - 美团配送平台高可用实践
美团点评技术沙龙06 - 美团外卖全链路性能测试实践

W3CTech美团react专场-Thinking in React