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. JWT 身份认证优缺点分析以及常见问题解决方案
  2. SSE命令示例代码(转换、加载、置位、存储)
  3. ML之DT(树模型):DT(树模型算法)算法的简介、代码定义、案例应用之详细攻略
  4. PE文件结构详解(六)重定位
  5. junit5和junit4_JUnit 5 –条件
  6. 区县级政府网站群建设要点
  7. SqlServer优化:当数据量查询不是特别多,但数据库服务器的CPU资源一直100%时,如何优化?...
  8. 苹果iOS 14系统面板截图曝光:加入新墙纸设置
  9. C#读取 *.exe.config
  10. python标准库math中用来计算平方根的函数是_Python程序设计的复习题资料合集免费下载...
  11. 顶隙计算公式_齿轮参数计算公式,这次终于整全了
  12. Cocos2dx之UI组件
  13. java实现控制台表格
  14. 继承 方法重写 组合(尚学堂视频学习总结_003)
  15. 因服务器升级维护平安京怎么办,阴阳师12月31日维护更新公告_阴阳师12月31日更新了什么_玩游戏网...
  16. opop如何和计算机链接,oppo如何连接电脑
  17. InvokeRequired and Invoke
  18. Jupyter notebook 如何进入D盘
  19. java profile cpu_Java进程高CPU使用调查方法简介
  20. 2021年前端校招面试题整理

热门文章

  1. 怎么用wps抽签_怎么用WPS做活动抽签用的PPT?有模板可以给我更好!
  2. 深度学习-Tensorflow使用Keras进行模型训练
  3. Prometheus-普罗米修斯
  4. 稳定版全网淘宝商品接口,淘宝主图接口取分类,主图,标题,价格,旺旺等
  5. 公式e=1+1/1!+1/2!+1/3!+......,求 e 的近似值,当下一项的值精度小于10的-6次方时停止累加运算。
  6. 华为还是赢了,高通为它定制新款芯片,率先在手机接入卫星通信
  7. 省市县三级联动数据库
  8. Matlab报错:错误使用 rgb2gray>parse_inputs (第 79 行) MAP 必须为 m x 3 的数组。请对 RGB 和灰度图像使用 im2gray。
  9. IDEA+WampServer配置PHP运行环境
  10. Spring 响应式编程,真香!!!