React入门

React 是一个用于构建用户界面的 JAVASCRIPT 库。
起源:
React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站
描述

由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单
这个项目本身也越滚越大,从最早的UI引擎变成了一整套前后端通吃的 Web App 解决方案。衍生的 React Native 
项目,目标更是宏伟,希望用写 Web App 的方式去写 Native App。
如果能够实现,整个互联网行业都会被颠覆,因为同一组人只需要写一次 UI ,就能同时运行在服务器、浏览器和手机

react的特点

1.声明式设计 −React采用声明范式,可以轻松描述应用。
2.高效 −React通过对DOM的模拟,最大限度地减少与DOM的交互。
3.灵活 −React可以与已知的库或框架很好地配合。
4.JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。
5.组件 − 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。
6.单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

声明式设计

// 声明式
const element1 = React.createElement(
    'div',
    {className:"greeting"},
    '哈哈'
)

// 过程式
element2 = document.createElement 'div'
element2.className = 'greeting'
element2.innerHTML = '哈哈'

// 类似于这样一种简化的结构
const element = {
    type: 'h1',
    props: {
        className: 'greeting',
        children: 'Hello, world'
    }
};
ReactDOM.render(
    element1, 
    document.getElementById('root') 
);

组件(两大特点 封装 重用)

react的使用离不开三个核心的库

 <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <!--react的与dom相关的一些功能-->
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <!--将浏览器不支持的jsx语法转化为js语法-->
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>

JSX语法(react使用jsx代替常规的javascript)

  1. 可以创建一个独立的js文件来使用,通过script标签来引入

  2. 使用多个标签,使用div包裹

  3. 支持表达式, js表达式可以直接被解析

  4. 不支持if else 可以使用三元表达式代替 相当于是vue中 的 v-if

  5. 直接解析数组 相当于是vue中的v-for

  6. 标签中注释使用花括号包裹,区别于原先的js注释 , 否则的话 , 注释会 直接解析成文本

  7. 推荐使用内联样式 直接进行样式的绑定 相当于是vue中的 v-bind

为什么使用jsx语法

jsx语法允许html和js的混写, 使页面数据和样式的操作变得钢架简单
核心

  • 遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;
  • 遇到 以 { 开头的结构,就用 js 规则解析;

如何使用jsx语法

标签渲染

遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;

代码注释

在jsx语法中, 标签中写代码注释需要放到{} 中

React.createElement()

从本质上讲,JSX 只是为 React.createElement(component, props, ...children) 函数提供的语法糖

react数据变化检测--元素渲染

元素(Elements)是 React 应用中最小的构建部件(或者说构建块,building blocks)。

元素用于描述你在页面上看到的内容

页面的基本渲染

元素的更新

在React中,元素是不能发生突变的,要进行元素的,一旦创建了元素,就不能修改其子元素或者是相关的属性

元素更新的措施是: 创建一个新的元素并使用render函数重新渲染

页面变化检测与更新的实现原理

  • react维护两个状态——现在的页面DOM、即将要渲染的页面DOM(数据) 两部分进行对比:自动渲染不同部分。

  • 每次发生事件、动画,都会和之前的状态进行对比。

    • 相同:不再次进行渲染。
    • 不同:进行渲染界面。
    • 适合大量数据操作的框架——react。

参考链接 https://zhuanlan.zhihu.com/purerender/2034637
在react中,当元素发生变化的时候,并不会进行所有的元素的更新,

在react内部,执行了一个diff 算法,只对当前变化的节点进行检测更新,而不是更新所有的节点

在react中,使用diff + virtual dom 结合的方式,实现元素的变化检测与更新

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • react简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript M...
    宸桐阅读 3,135评论 2 5
  • React简介 React是一个用于构建用户界面的JavaScript库,主要有以下几个特点: 声明式设计--Re...
    紫诺_qiu阅读 889评论 0 2
  • 1.React 的学习资源 react官方首页https://facebook.github.io/react/ ...
    贾里阅读 2,824评论 0 0
  • 现在最热门的前端框架,毫无疑问是React。在基于React的React Native发布一天之内,就获得了 50...
    Mycro阅读 1,002评论 3 6
  • 很多人都被“便宜和坏”的想法所影响,认为你很好,你对食物的选择也有同样的想法。 虽然这句话在生活中被证实了很多,但...
    三个乡巴佬特产阅读 405评论 0 0