React中常见的组件类型及分类:

  • 1、展示组件(Presentational component) 与 容器组件(Container component)
  • 2、类组件(Class component) 与 函数式组件(Functional component)
  • 3、受控组件(Controlled Component )与 非受控组件(Uncontrolled Component )
  • 4、高阶组件(higher order component)

1、展示组件(Presentational component) 与 容器组件(Container component)

展示组件:

  • 关注UI呈现
  • 仅通过props接收数据与回调函数。
  • 不定义数据如何加载与变化。
  • 仅通过props接收数据与回调函数。
  • 即便拥有状态也只是UI的状态而非data。
  • 如果不需要拥有状态、生命周期函数、或者性能优化,展示组件通常以函数组件方式呈现。

容器组件:

  • 关注运作。
  • 为展示组件/容器组件提供数据与行为
  • 通常是有状态的,往往会被作为其他组件的数据源使用。
  • 通常由高级组件而非手写生成。高级组件包括Redux的connect(),Relay的createContainer()或Flux的Container.create()。

不需要教条地区分展示组件与容器组件。有些时候并不需要也很难划出一条分界线。如果你对一个具体组件应该是容器组件还是展示组件感到疑惑,那说明此时区分还尚早。继续做下去。

2、类组件(Class component) 与 函数式组件(Functional component)

区别 类组件 函数组件
语法上 js函数定义的组件 class定义的组件
状态管理上 无状态组件,不能在组件中使用setState() 组件直接访问 store 并维持状态
生命周期钩子 不能在函数组件中使用生命周期钩子
生命周期钩子都来自于继承的React.Component中。
生命周期钩子函数
调用方式 无需实例化 实例化

调用方式:
如果SayHi是一个函数,React需要调用它:

// 你的代码
function SayHi() { return <p>Hello, React</p>
}
// React内部
const result = SayHi(props) // » <p>Hello, React</p>

如果SayHi是一个类,React需要先用new操作符将其实例化,然后调用刚才生成实例的render方法:

// 你的代码
class SayHi extends React.Component { render() { return <p>Hello, React</p> }
}
// React内部
const instance = new SayHi(props) // » SayHi {}
const result = instance.render() // » <p>Hello, React</p>

可想而知,

  • 函数组件重新渲染:将重新调用组件方法返回新的react元素。
  • 类组件重新渲染:将new一个新的组件实例,然后调用render类方法返回react元素,这也说明为什么类组件中this是可变的。

3、受控组件(Controlled Component )与 非受控组件(Uncontrolled Component )

受控组件:
1、在React中,每当表单的状态发生变化时,都会被写入到组件的state中
2、在受控组件中,组件渲染出的状态与它的value或checked的prop相对应
3、state的更新是由react的setState()来控制更新

非受控组件:
简单的说,如果一个表单组件没有value的props(单选按钮和复选框对应的是checked props)就可以称为非受控组件。这样,我们可以使用defaultValuedefaultChecked来表示组件的默认状态。
在React中,非受控组件是一种反模式,它的值不受组件自身的state或者props控制,通常需要为其添加ref的prop属性来访问渲染后的底层DOM元素。

受控组件和非受控组件的对比:

// 受控组件
<inputvalue={this.state.value}onChange={(e) => this.setState({value: e.target.value})}
>// 非受控组件
<input defaultValue={this.state.value}onChange={e => {this.setState({value: e.target.value})}}
>
  • 受控组件的值来源于state。在受控组件中,可以将输入的内容输出展示。
  • 非受控组件状态并不会受组件应用状态的控制,应用中也多了局部组件状态defaultValue,通过defaultValue或者defaultChecked来设置表单的默认值,它仅会被渲染一次,在后续的渲染时并不起作用。

4、高阶组件HOC (higher order component)

高阶函数概念:
高阶组件是(参数为组件,返回值为新组件)的函数,是将一个组件转换为另一个组件。

高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。

高阶组件需要注意的几个点:

  • 高价组件是个函数,也可以说是一种设计模式。
  • 高阶组件不是react的API。
  • 高阶组件用于复用组件逻辑

深入理解React高阶组件

react组件类型及深入理解react高阶组件相关推荐

  1. React(精读官方文档) - 高级指引 -高阶组件

    高阶组件(HOC) 概述 是React复用组件逻辑的一种高级技巧,是一种基于React组合特性而形成的设计模式 高阶组件是参数为组件,返回值为新组件的函数 简单理解: 高阶组件本身是 函数,传参数是组 ...

  2. 写一个组织架构图组件来深入认识vue函数式高阶组件

    本文涉及到的知识点: Vue函数式组件 递归函数 深拷贝对象 正则匹配 近期在开发一个vue组织架构图组件时,为了实现高性能渲染和一些特殊用法,使用了函数式组件,要实现的效果是这样: 写一个组织架构图 ...

  3. React 高阶组件HOC、设置displayName、高阶组件传递props

    文章目录 1. 高阶组件 使用步骤 2. 高阶组件设置displayName 3.传递props 1. 高阶组件 目的:实现状态逻辑复用.实现功能增强.返回一个增强组件. 高阶组件(HOC,Highe ...

  4. 组件和高阶组件区别_为什么要对高阶组件使用代码拆分

    组件和高阶组件区别 by Nitish Phanse 由Nitish Phanse 为什么要对高阶组件使用代码拆分 (Why you should use code splitting with hi ...

  5. React高阶组件实践

    前言 React高阶组件,即 Higher-Order Component,其官方解释是: A higher-order component is a function that takes a co ...

  6. [react] 写一个react的高阶组件并说明你对高阶组件的理解

    [react] 写一个react的高阶组件并说明你对高阶组件的理解 定义高阶组件 import React, { Component } from 'react';const simpleHoc = ...

  7. React高阶组件深入理解

    1. 基本概念 高阶组件是React 中一个很重要且较复杂的概念,高阶组件在很多第三方库(如Redux)中都被经常使用,即使你开发的是普通的业务项目,用好高阶组件也能显著提高你的代码质量. 高阶组件的 ...

  8. React总结篇之六_React高阶组件

    高阶组件的概念及应用 以函数为子组件的模式 这两种方式的最终目的都是为了重用代码,只是策略不同,各有优劣,开发者可以在实际工作中决定采用哪种方式. 一.高阶组件 1. 高阶组件(Higher Orde ...

  9. React中的高阶组件

    React中的高阶组件 高阶组件HOC即Higher Order Component是React中用于复用组件逻辑的一种高级技巧,HOC自身不是React API的一部分,它是一种基于React的组合 ...

最新文章

  1. Exchange 2007更改用户收发邮件大小限制
  2. Android studio 刷新文件状态
  3. 线性代数同济第六版_线性代数考试内容与课后习题
  4. Android 和 Chrome OS 融合的可能性
  5. element手机验证格式_Laravel 自定义封装表单验证类
  6. QT int QString char转换
  7. Go语言练习:网络编程实例——简易图片上传网站
  8. 成绩单表格html,【Web前端HTML5CSS3】15-表格
  9. 转帖节选:卓有成效的管理者(彼得.德鲁克)
  10. 1081 检查密码 (15 分)—PAT (Basic Level) Practice (中文)
  11. 453. Minimum Moves to Equal Array Elements 一次改2个数,变成统一的
  12. IDEA 2021安装及汉化教程
  13. 利用obs技术进行推流直播
  14. 盛金公式解一元三次方程_用盛金公式求解一元三次方程
  15. 时间校准(全网最全最准确方案)完美无解
  16. 2016 360校招笔试编程题
  17. 追男妙计 三招搞定!
  18. AJAX技术学院风连衣裙,学院风连衣裙怎么搭配好看
  19. 六根清净怎么讲 ---圣严法师
  20. uniapp app 端截屏且保存到本地

热门文章

  1. 【Axure视频教程】鼠标滚动切换图片
  2. 华为云桌面客户端_华为云CloudIDE的前世今生
  3. WM8960驱动的移植记录
  4. php中生成随机数种子的函数有哪些,PHP内置函数生成随机数的方法汇总
  5. 企业内部培训和外部培训的区分
  6. 快如闪电的开源搜索引擎:Typesense ,比Elasticsearch更快更易用
  7. Matlab一元二次方程求根
  8. 广东财经大学计算机自考科目,广东财经大学自考会计本科(120203K)专业介绍及考试计划...
  9. 并发控制- sched_yield 函数
  10. 360加固框架Gradle实现