博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React 中被忽略的函数组件(Functional Components)
阅读量:5836 次
发布时间:2019-06-18

本文共 1440 字,大约阅读时间需要 4 分钟。

React中有两种组件:函数组件(Functional Components) 和类组件(Class Components)。据我观察,大部分同学都习惯于用类组件,而很少会主动写函数组件,包括我自己也是这样。但实际上,在使用场景和功能实现上,这两类组件是有很大区别的。

来看一个函数组件的例子:

function Welcome = (props) => {  const sayHi = () => {    alert(`Hi ${props.name}`);  }  return (      

Hello, {props.name}

)}

把上面的函数组件改写成类组件:

import React from 'react'class Welcome extends React.Component {  constructor(props) {    super(props);    this.sayHi = this.sayHi.bind(this);  }    sayHi() {    alert(`Hi ${this.props.name}`);  }    render() {    return (      

Hello, {this.props.name}

) } }

下面让我们来分析一下两种实现的区别:

  1. 第一眼直观的区别是,函数组件的代码量比类组件要少一些,所以函数组件比类组件更加简洁。千万不要小看这一点,对于我们追求极致的程序员来说,这依然是不可忽视的。
  2. 函数组件看似只是一个返回值是DOM结构的函数,其实它的背后是无状态组件(Stateless Components)的思想。函数组件中,你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件(Presentational Components),接收Props,渲染DOM,而不关注其他逻辑。
  3. 函数组件中没有this。所以你再也不需要考虑this带来的烦恼。而在类组件中,你依然要记得绑定this这个琐碎的事情。如示例中的sayHi
  4. 函数组件更容易理解。当你看到一个函数组件时,你就知道它的功能只是接收属性,渲染页面,它不执行与UI无关的逻辑处理,它只是一个纯函数。而不用在意它返回的DOM结构有多复杂。
  5. 性能。目前React还是会把函数组件在内部转换成类组件,所以使用函数组件和使用类组件在性能上并无大的差异。但是,React官方已承诺,未来将会优化函数组件的性能,因为函数组件不需要考虑组件状态和组件生命周期方法中的各种比较校验,所以有很大的性能提升空间。
  6. 函数组件迫使你思考最佳实践。这是最重要的一点。组件的主要职责是UI渲染,理想情况下,所有的组件都是展示性组件,每个页面都是由这些展示性组件组合而成。如果一个组件是函数组件,那么它当然满足这个要求。所以牢记函数组件的概念,可以让你在写组件时,先思考这个组件应不应该是展示性组件。更多的展示性组件意味着更多的组件有更简洁的结构,更多的组件能被更好的复用。

所以,当你下次在动手写组件时,一定不要忽略了函数组件,应该尽可能多地使用函数组件。


欢迎关注我的公众号:老干部的大前端,领取21本大前端精选书籍!

3808299627-5a93ba468b59a

转载地址:http://ayycx.baihongyu.com/

你可能感兴趣的文章
获取鼠标和元素的坐标点
查看>>
PXE 部署不同版本的系统安装环境以及挽救环境
查看>>
Linux 计划任务
查看>>
面向对象进阶----->反射 getattr 和hasattr方法
查看>>
flask的orm操作
查看>>
移动开源框架
查看>>
深入理解SpringBoot之启动探究
查看>>
shell脚本(一)
查看>>
MySQL innodb_undo_tablespaces相关参数
查看>>
noclobber
查看>>
ognl.InappropriateExpressionException: Inappropriate OGNL expression: 1
查看>>
background-position 用法详细介绍
查看>>
Python+MySQL
查看>>
Python编程
查看>>
IDEA实现序列号接口
查看>>
spring-boot 速成(8) 集成druid+mybatis
查看>>
阿里云联手Intel开启“TOP游戏”云生态培育计划,携手共建精品游戏生态
查看>>
高并发之Memcached实战第10课-“Memcached Get获取数据”部分代码分享2
查看>>
Linux上用nginx搭建RTMP服务器
查看>>
发现一号店首页曝出重大XSS漏洞,在IE8,IE9,IE10上均有此漏洞
查看>>