react组件类型及深入理解react高阶组件
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)就可以称为非受控组件。这样,我们可以使用defaultValue
和defaultChecked
来表示组件的默认状态。
在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高阶组件相关推荐
- React(精读官方文档) - 高级指引 -高阶组件
高阶组件(HOC) 概述 是React复用组件逻辑的一种高级技巧,是一种基于React组合特性而形成的设计模式 高阶组件是参数为组件,返回值为新组件的函数 简单理解: 高阶组件本身是 函数,传参数是组 ...
- 写一个组织架构图组件来深入认识vue函数式高阶组件
本文涉及到的知识点: Vue函数式组件 递归函数 深拷贝对象 正则匹配 近期在开发一个vue组织架构图组件时,为了实现高性能渲染和一些特殊用法,使用了函数式组件,要实现的效果是这样: 写一个组织架构图 ...
- React 高阶组件HOC、设置displayName、高阶组件传递props
文章目录 1. 高阶组件 使用步骤 2. 高阶组件设置displayName 3.传递props 1. 高阶组件 目的:实现状态逻辑复用.实现功能增强.返回一个增强组件. 高阶组件(HOC,Highe ...
- 组件和高阶组件区别_为什么要对高阶组件使用代码拆分
组件和高阶组件区别 by Nitish Phanse 由Nitish Phanse 为什么要对高阶组件使用代码拆分 (Why you should use code splitting with hi ...
- React高阶组件实践
前言 React高阶组件,即 Higher-Order Component,其官方解释是: A higher-order component is a function that takes a co ...
- [react] 写一个react的高阶组件并说明你对高阶组件的理解
[react] 写一个react的高阶组件并说明你对高阶组件的理解 定义高阶组件 import React, { Component } from 'react';const simpleHoc = ...
- React高阶组件深入理解
1. 基本概念 高阶组件是React 中一个很重要且较复杂的概念,高阶组件在很多第三方库(如Redux)中都被经常使用,即使你开发的是普通的业务项目,用好高阶组件也能显著提高你的代码质量. 高阶组件的 ...
- React总结篇之六_React高阶组件
高阶组件的概念及应用 以函数为子组件的模式 这两种方式的最终目的都是为了重用代码,只是策略不同,各有优劣,开发者可以在实际工作中决定采用哪种方式. 一.高阶组件 1. 高阶组件(Higher Orde ...
- React中的高阶组件
React中的高阶组件 高阶组件HOC即Higher Order Component是React中用于复用组件逻辑的一种高级技巧,HOC自身不是React API的一部分,它是一种基于React的组合 ...
最新文章
- Exchange 2007更改用户收发邮件大小限制
- Android studio 刷新文件状态
- 线性代数同济第六版_线性代数考试内容与课后习题
- Android 和 Chrome OS 融合的可能性
- element手机验证格式_Laravel 自定义封装表单验证类
- QT int QString char转换
- Go语言练习:网络编程实例——简易图片上传网站
- 成绩单表格html,【Web前端HTML5CSS3】15-表格
- 转帖节选:卓有成效的管理者(彼得.德鲁克)
- 1081 检查密码 (15 分)—PAT (Basic Level) Practice (中文)
- 453. Minimum Moves to Equal Array Elements 一次改2个数,变成统一的
- IDEA 2021安装及汉化教程
- 利用obs技术进行推流直播
- 盛金公式解一元三次方程_用盛金公式求解一元三次方程
- 时间校准(全网最全最准确方案)完美无解
- 2016 360校招笔试编程题
- 追男妙计 三招搞定!
- AJAX技术学院风连衣裙,学院风连衣裙怎么搭配好看
- 六根清净怎么讲 ---圣严法师
- uniapp app 端截屏且保存到本地
热门文章
- 【Axure视频教程】鼠标滚动切换图片
- 华为云桌面客户端_华为云CloudIDE的前世今生
- WM8960驱动的移植记录
- php中生成随机数种子的函数有哪些,PHP内置函数生成随机数的方法汇总
- 企业内部培训和外部培训的区分
- 快如闪电的开源搜索引擎:Typesense ,比Elasticsearch更快更易用
- Matlab一元二次方程求根
- 广东财经大学计算机自考科目,广东财经大学自考会计本科(120203K)专业介绍及考试计划...
- 并发控制- sched_yield 函数
- 360加固框架Gradle实现