React.js.

Slides:



Advertisements
Similar presentations
心理现象及心理学效应. 蝴蝶效应 青蛙现象 鳄鱼法则 鲇鱼效应 羊群效应 木桶理论 马太效应 手表定律 破窗理论 二八定律 木桶理论 马太效应 责任分散效应 鸟笼逻辑 帕金森定律 晕轮效应 霍桑效应 习得性无助实验 证人的记忆 罗森塔尔效应 虚假同感偏差.
Advertisements

2016年8月29日 2016年8月29日 2016年8月29日 复旦大学 2006 年春 参考 TOPICS.
跨平台移动开发框架比较 How many mobile platforms android 拥有最多的 developer. 开发语言-大众脸- java 开发成本最低,不用单独买一台电脑. 开发者账号-免费 发布应用很快-当天提交,当天就能发布 iOS 贵族平台-至少把自己包装的很高大上.
SanazM Compiled By: SanazM Here Are Some Tips That May Bring You A Beautiful Life! Music: 美麗人生 Angel ( 主題曲 ) Revised By: Henry 以下是一些能帶給你一個美麗人生的秘訣 中文註解:
APEX数据和知识管理实验室简介 上海交通大学 计算机科学与工程系.
拉伸和收缩包装技术 1. 简 介 2. 主要特点 3. 常见收缩包装设备 4. 常见拉伸包装设备.
僑泰高級中學 By: 高中部 三年四班 羅君瑛 資訊科 二年乙班 羅泰傑 電子科 二年甲班 許振崑.
DATE: 14/10/2009 陳威宇 格網技術組 雲端運算相關應用 (Based on Hadoop)
谷雨节气模板.
第三課: 領袖的自處(一):時間.
中国历史 七年级下册.
增译法 作为翻译的一个普遍准则,译者不应当对原文的内容随意增减。不过,在实际翻译过程中,要准确地传达原文的信息,译者难免要对译文做一些增添或删减, 译者往往需要把原文中隐含的一些东西增补清楚,以便于读者理解。 例如: Success is often just an idea away. 原译:成功往往只是一个念头的距离。
中信信诚-淮安项目.
浅析浏览器解析和渲染 偏右.
State Building And Late Development
速收简历 速收简历移动APP项目 速收简历团队.
自衛消防編組任務職責 講 義 This template can be used as a starter file for presenting training materials in a group setting. Sections Right-click on a slide to add.
浏览器工作原理浅析 TID Ghostzhang.
雅思大作文的结构 Presented by: 总统秘书王富贵.
習慣為成功之本 方智出版社 郭騰尹/著 書摘製作人: 全家便利商店教育訓練中心 盧冠諭 :
No Zuo No Die Why Not Try ? ——做更好的前端 技术中心 黄家权/mss.
3.实行基层民主自治的意义   ①实行基层民主自治,以保证人民群众 依法直接行使民主权利,管理基层公共事务 和公益事业,是人民当家作主最有效的途径。   ②是社会主义民主最为广泛而深刻的实践,也是发展社会主义民主的基础性工作。
摘要的开头: The passage mainly tells us sth.
01 C++ (Dynamic Array, Sort & STL)
實用日常英文用語 陳辟賢老師                          .
Unit 7 Protect the Earth (Story time) 觅渡教育集团 王 珏 标题 课时 教师姓名 日期 1.
专题讲座 武强中学外语组 制作:刘瑞红.
Module 5 Shopping 第2课时.
Selenium 一个用于Web应用程序测试的工具 Robin Ren
Here Are Some Tips That May Bring You A Beautiful Life!
Qtopia 编程部分要点分析 苗忠良.
网站设计 前端 入门学习.
Ajax编程技术 第一章 Ajax简介.
軟體原型 (Software Prototyping)
Working with Databases (II) 靜宜大學資管系 楊子青
Creating Animated Apps (I) 靜宜大學資管系 楊子青
Lecture 2 Lecture An Introduction To The HTML Language
JavaScript 靜宜大學 資管系 楊子青.
前终端一体化开发解决方案 腾讯 lucaspei(裴伟).
Semantic Navigation Liang Zheng.
从渲染原理到性能优化.
前端技术开发 高莺.
2.2 Web界面设计 信息工程系 向模军 Tel: QQ:
Here Are Some Tips That May Bring You A Beautiful Life!
对ReactJs的认知.
資料庫 靜宜大學資管系 楊子青.
Here Are Some Tips That May Bring You A Beautiful Life!
Remember the five simple rules to be happy 快樂的五個簡單常規
Here Are Some Tips That May Bring You A Beautiful Life!
计算机问题求解 – 论题1-7 - 不同的程序设计方法
UC九游 天猪(atian25) AngularJS 进阶实践 UC九游 天猪(atian25)
Guide to a successful PowerPoint design – simple is best
JQuery基礎與動畫、特效 靜宜大學 資管系 楊子青.
JQuery基礎與動畫、特效 靜宜大學 資管系 楊子青 網路參考資源:
LOGO 缅怀先烈 雷锋.
第三組 成員 王郁昀 美術 李孟澤 程式 王子榮 企劃 美術 李奕增 企劃 美術 石名辰 企劃 程式 許登竣 美術.
Chapter 5 Basic UI Design.
中央社新聞— <LTTC:台灣學生英語聽說提升 讀寫相對下降>
True friendship is like sound health;
中考英语阅读理解 完成句子命题与备考 宝鸡市教育局教研室 任军利
Remember the five simple rules to be happy 快樂的五個簡單常規
Remember the five simple rules to be happy 快樂的五個簡單常規
网 站 设 计 与 建 设 Website design and developments
立足语境,放眼词块,螺旋上升 年温州一模试卷题型分析 及相应的二轮复习对策 by Sue March 14,2013.
ABC 2016 課碼(Workshop): M-201 教室(Room #): 115A
知识分享:使用web写UI, 使用js对接C++项目, 提高开发效 率。
Further Development Translation 来自 创思英语 Grammar.
Web前端开发 第17章:AngularJS 阮晓龙 /
知识点讲解 1、DOM节点树 DOM(Document Object Model)称为文档对象模型,是一个表示和处理文 档的应用程序接口(API),可用于动态访问、更新文档的内容、结构和样 式。DOM将网页中文档的对象关系规划为节点层级,构成它们之间的等级关 系,这种各对象间的层次结构被称为节点树。如下图所示。
Section 1 Basic concepts of web page
Presentation transcript:

React.js

Why React? React aims to solve one problem: building large applications with data that changes over time. Simple 只处理 View 在JS里直接写类HTML,更直接,省去复杂的 DSL Component 内聚性高,关注分离,很容易重用和嵌套 Declarative 只需声明怎么显示,不需要关心怎么更新DOM one-way data binding 更高效 DSL(Domain specific language) 领域特定语言 模板语言:handlebars、ejs、mustache、underscore、nunjucks、xtemplate 有哪些好用的前端模板引擎https://www.zhihu.com/question/32524504

目录 Component 组件 坑/技巧 Event 事件 React Rending 多Components通信

Component 组件

Web Component W3C Draft Google Polymer (since 2013) https://polymer-zh.cn/ Mozilla X-Tag http://www.uedsc.com/use-x-tag-and-web-plugs.html Angular directive (similar) https://segmentfault.com/a/1190000005851663 W3c组件化草案 2013年Google I/O大会Google WebOS团队宣布了一套号称一切皆组件、最少代码量、最少框架限制为设计理念的Polymer WebUI组件 火狐推出微软赞助支持开发的X-Tag Google憋出大招推出数据双向绑定的Angular

HTML Component

React Component 编译 前后行数不变

React Component React is all about building reusable components. Components make code reuse, testing, and separation of concerns easy. Components are Just Like Functions that take in props, state and render HTML

Component 几个重要的方法 render() componentDidMount() propTypes required method 保持简单,不要在这里操作DOM,不要在这里修改state componentDidMount() view已经render好,在这里可以操作DOM,this.getDOMNode()取节点 propTypes 对parent传进来的props做验证,只作用于development环境 getInitialState() 返回 state 初始值,可以在这里使用 this.props this.setState() 设置state值, 这里可以有回调函数 forceUpdate() 不建议使用 当更新了除this.props和this.state外的内容时调用。forceUpdate() 会调用当前 component 和子级 component 的 `render()`,仍会使用Virtual DOM,所以仍然很快

this.props 原则上不可改变 数据由 parent 传入

this.props.children 返回component标签内部包含的components,开发dialog, popup等容器类组件时可用。 如果有多个子级components,会返回数组 如果只有一个子级components, 返回这个component 如果没有子结果,返回 undefined 3种不同的结果可以使用 React.Children 工具类统一处理

this.props.children

this.state State should contain data that a component's event handlers may change to trigger a UI update. Try to keep as many of your components as possible stateless. 只属于当前component,不可传递也不可继承 更新state的方式只有两种:getInitialState(), setState(obj) setState(obj) 异步操作,不会立即更新this.state,也不会立即调用render 是merge合并,而不是替换

this.setState

Fail with 'Uncaught objec' 不建议使用 this.setProps() Pass 受控组件 非受控组件 https://segmentfault.com/a/1190000012404114 Fail with 'Uncaught objec'

PropTypes 对从parent传入的props做验证 验证失败会抛warning,只在development环境生效

Environment 环境 development production debug 版本,有 PropTypes 验证 min 版本,速度有做优化,会跳过 PropTypes 验证

this.refs 不建议使用

复杂点的栗子

JSX 坑 多行时要用小括号 () 括起来 JavaScript表达式要用大括号 {} 括起来 给节点设置样式要使用 className,因为class是保留关键字 最外层只能有一个节点,这个节点是根节点 渲染html属性:dangerouslySetInnerHTML={{__html:”<p>test</p>”}} 非标准属性会被忽略,要使用data-* <p age=‘18’>Hello</p> age 属性不会显示到 DOM <p data-age='18'>Hello</p> data-age 会显示出来

classSet处理样式

处理inline style × √

Event 事件

Event 事件 React使用SyntheticEvent 合成事件 http://www.css88.com/react/docs/events.html 1.使用e.preventDefault阻止事件的发生; 2.event.nativeEvent 返回浏览器原生事件 3.调用方式如下图 原生浏览器事件的差异 1. return false阻止事件的发生 2.调用方式

Event 事件

事件绑定 Autobinding Auto delegation 事件自动绑定到当前 component 实例,即 `this` 指向当前component Auto delegation React 并不直接在node上绑定event。 当React启动时,它会在 component 最外层节点上仅使用一个 event listener 监听所有 events。当component mounted或unmounted时,event listener 只是在内部 mapping 里添加或删除event handler. http://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html#under-the-hood-autobinding-and-event-delegation

React Rending

View 生命周期 View 初始化 setState后更新 父级更新props 销毁 getDefaultProps getInitialState componentWillMount render componentDidMount setState后更新 shouldComponentUpdate componentWillUpdate render componentDidUpdate 父级更新props componentWillReceiveProps 同 setState后更新流程 销毁 componentWillUnmount

Virtual DOM 通过两个DOM Tree比较来批量更新 第一次调用 render() 后保存一个当前的Virtual DOM Tree. 需要更新DOM时,重新调用 render 生成新的 Virtual DOM,并与旧的比较 如果有变化,则对变化部分做批量更新

性能优化 会直接把paragraph 1删除吗? 不会 更新前 更新后 实际过程: 1. 把‘Paragraph 1’节点内容更新为‘Paragraph 2’, 2. 删除‘Paragraph 2’节点

性能优化 使用 css show/hide 节点,而不是直接删除 处理 list 时需要加 key

性能优化 http://calendar.perfplanet.com/2013/diff/ List demo setState 会重新 render 所有的子树。为了性能考虑,应该尽可能在低层处调用setState,并使用 shouldComponentUpdate 来阻止大子树不必要的重新render。

shouldComponentUpdate 性能优化 http://calendar.perfplanet.com/2013/diff/ shouldComponentUpdate

多Components通信

多Components通信: parent -> child 直接传props

多Components通信: Child -> parent 通过props传callback方法 代理模式

多Components通信: 非父子关系 使用全局事件 Subscribe to events in componentDidMount() unsubscribe in componentWillUnmount() when you receive an event, call setState() 适配器模式

OTHER WONDERS Can be used with SVG, VML, Canvas Can be used with NodeJS (同构) Can be run with Web Worker http://www.w3school.com.cn/html5/html_5_webworkers.asp Can be tested

Thanks