React

什么时候使用功能组件( Functional  Component ),使用类组件( Class  Component )?

如果您的组件具有状态( state )或生命周期方法,请使用 Class 组件。否则,使用功能组件

在哪个生命周期事件中发出 AJAX 请求?

AJAX 请求应该在componentDidMount生命周期事件中。 有几个原因:

Fiber,是下一次实施React的和解算法,将有能力根据需要启动和停止渲染,以获得性能优势。其中一个取舍之一是componentWillMount,而在其他的生命周期事件中出发 AJAX 请求,将是具有 “非确定性的”。 这意味着 React 可以在需要时感觉到不同的时间开始调用 componentWillMount。这显然是AJAX请求的不好的方式。

-您不能保证在组件挂载之前,AJAX请求将无法 resolve。如果这样做,那意味着你会尝试在一个未挂载的组件上设置 StState,这不仅不会起作用,反而会对你大喊大叫。 在componentDidMount中执行 AJAX 将保证至少有一个要更新的组件。

shouldComponentUpdate 的作用?

在生命周期方法 shouldComponentUpdate 中,允许我们选择退出某些组件(和他们的子组件)的 reconciliation 过程

“和解( reconciliation )的最终目标是以最有效的方式,根据新的状态更新用户界面”。如果我们知道用户界面(UI)的某一部分不会改变,那么没有理由让 React 再去弄清楚它是否应该渲染。通过从 shouldComponentUpdate 返回 false,React 将假定当前组件及其所有子组件将保持与当前组件相同

shouldComponentUpdate 用来判断是否需要调用render方法重新描绘dom。因为dom的描绘非常消耗性能,如果在这个方法中能够写出更优化的dom diff算法,就可以极大的提高性能。

组件的生命周期为:

初始化:

    getDefaultProps: 获取实例的默认属性

    getInitialState: 获取每个实例的初始化状态

挂载阶段:

    constructor()  

    componentWillMount() 组件即将被装载、渲染到页面上

    render()  组件生成虚拟的DOM节点

    componentDidMount()  组件真正在被装载之后

更新阶段为:

    componentWillReceiveProps()    组件将要接收到属性的时候调用

    shouldComponentUpdate()   组件接受到新属性或者新状态的时候(可以返回false,接收数据后不更新,阻止render调用,后面的函数不会被继续执行)

    componentWillUpdate()   组件即将更新不能修改属性和状态

    render()     组件重新描绘

    componentDidUpdate   组件已经更新

销毁阶段:

    componentWillUnmount   组件即将销毁

受控组件( controlled component )与不受控制的组件( uncontrolled component )有什么区别

受控组件是React控制的组件,也是表单数据的唯一真理来源

受控组件

不受控制( uncontrolled component )的组件是您的表单数据由 DOM 处理,而不是您的 React 组件

不受控制的组件

React 中的keys是什么,为什么它们很重要?

keys是什么帮助 React 跟踪哪些项目已更改、添加或从列表中删除

什么是 React 的 refs

refs就像是一个逃生舱口,允许直接访问DOM元素或组件实例

向组件添加一个 ref 属性,该属性的值是一个回调函数,它将接收底层的 DOM 元素或组件的已挂接实例,作为其第一个参数

在 React 当中 Element 和 Component 有何区别?

简单地说,一个React element描述了你想在屏幕上看到什么。换个说法就是,一个React element是一些 UI 的对象表示

一个React Component是一个函数或一个类,它可以接受输入并返回一个React elementt(通常是通过 JSX ,它被转化成一个 createElement 调用)

当调用setState的时候,发生了什么?

当调用setState时,React会做的第一件事情是将传递给setState的对象合并到组件的当前状态。这将启动一个称为和解(reconciliation)的过程。和解(reconciliation)的最终目标是以最有效的方式,根据这个新的状态来更新UI。 为此,React将构建一个新的React元素树(您可以将其视为 UI 的对象表示)。

一旦有了这个树,为了弄清 UI 如何响应新的状态而改变,React 会将这个新树与上一个元素树相比较(diff)。

通过这样做, React 将会知道发生的确切变化,并且通过了解发生什么变化,只需在绝对必要的情况下进行更新即可最小化 UI 的占用空间。



React 基础

一、环境搭建 创建项目

npx create-react-app my-app  #创建一个react项目

cd my-app

npm start

二、jsx 语法

    JSX 防注入攻击

三、面向数据编程

 React 的基本原理:组件(components),属性(props)和状态(state)

1. React是一个声明式的,高效的,并且灵活的用于构建用户界面的 JavaScript 库。它允许您使用”components(组件)“(小巧而独立的代码片段)组合出各种复杂的UI。

2. 组件接收参数,称为 props(属性),通过 Props 传递数据,并通过 render 方法返回一个显示的视图层次结构,render 方法返回您要渲染的内容描述,然后 React 接受该描述并将其渲染到屏幕上。

3. React 开发人员使用一种名为 JSX (JavaScript XML)的特殊语法,可以更容易地编写这些结构

4. React 组件可以通过在构造函数中设置 this.state 来拥有 state(状态) ,构造函数应该被认为是组件的私有。

5. 在 JavaScript classes(类)中, 在定义子类的构造函数时,你需要始终调用 super 。所有具有constructor 的 React 组件类都应该以 super(props) 调用启动它

6. 要从多个子级收集数据 或 使两个子组件之间相互通信,您需要在其父组件中声明共享 state(状态) 。父组件可以使用props(属性) 将 state(状态) 传递回子节点;这可以使子组件彼此同步并与父组件保持同步。

7. 数据自顶向下流动

    父组件通过 属性的形式向子组件传递参数 子组件通过props接收父组件传来的参数

    子组件想要和父组件通信 要调用父组件传递过来的方法

四、Component 组件

生命周期

Mounted:React Components 被render解析生成对应的DOM节点 并被插入浏览器的DOM结构的过程

Update:一个mounted的React Components被重新render的过程

Unmounted:一个mounted的React Components对应的DOM节点被从DOM结构中移除的过程

每一个状态React都封装了hook(钩子)函数

lifecycle

生命周期钩子:

   componentDidMount :挂载函数

   componentWillUnmount:卸载函数



React 使用Redux数据流

React 是纯V层框架 需要数据流进行支撑

主流数据流框架: Flux / reFlux  /  Redux

Redux优势:简单 / 单一状态树

flux是单向数据流
redux完整流程
react 基础

redux 安装:

    npm install react-redux redux

    资料:    https://redux.js.org/

react-redux 框图

react-redux 项目结构:

    -- actions  

    -- components 

    -- container

    -- reducer 

    - index.html

    - server.js

    - webpack

action 、reducer、store介绍:

action
reducer
store

组件:

使用yeoman 构建项目

npm install -g yo      #安装yeoman

yo --version   #查看版本

npm install -g generator-react-webpack  #安装generator

npm ls -g --depth=1 2>/dev/null | grep generator-      #列出npm安装的全局generator包

yo react-webpack gallery-by-react     #新建名叫gallery-by-react 的项目

cd  gallery-by-react  

npm run start       #运行项目


构建工具:grunt 、webpack 、browserify、gulp

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

推荐阅读更多精彩内容