React Hook 提高代码复用性

栏目: 服务器 · 发布时间: 7年前

内容简介:代码复用一直是程序员所追求的,本文主要讲解如何利用 React Hook 提高代码的复用性。Hook 是 React 新特性,让你不用写 class,也可以使用 React 的 state 以及其他功能。目前该特性发布在 v16.7.0-alpha 版本中,所以还不推荐在生产环境中使用。想用 React 的 state,讨厌写 class,被 this 搞得晕头转向?Hook 来帮你。不仅如此,Hook 还可以帮你优雅的复用代码。

代码复用一直是 程序员 所追求的,本文主要讲解如何利用 React Hook 提高代码的复用性。

什么是 React Hook?

Hook 是 React 新特性,让你不用写 class,也可以使用 React 的 state 以及其他功能。目前该特性发布在 v16.7.0-alpha 版本中,所以还不推荐在生产环境中使用。

想用 React 的 state,讨厌写 class,被 this 搞得晕头转向?Hook 来帮你。不仅如此,Hook 还可以帮你优雅的复用代码。

举个例子

这个例子是通过 create-react-app 来创建的,由于 Hook 还没发布正式版,所以需要手动安装 react 和 react-dom 的 alpha 版本:

yarn add react@16.7.0-alpha.2 react-dom@16.7.0-alpha.2
复制代码

我们来写一个组件,取名叫 ColoredBanner ,它可以通过点击按钮随机改变背景颜色:

React Hook 提高代码复用性

很明显,要实现这个组件,需要一个状态来存储颜色,以及一个点击事件来改变状态,实现背景颜色的切换。

在没有 Hook 之前,我们需要创建一个类,然后通过 this.statethis.setState 实现状态管理。那么用 Hook 怎么实现呢?直接看代码:

React Hook 提高代码复用性

可以看到在函数中也可以使用 React 的状态机制。通过调用 React 提供的 useState() 方法,传入参数为初始值,返回一个数组,包含两个对象,一个是 color ,另一个是 setColor ,类似于 this.statethis.setState

还定义了一个方法 changeColor() ,随机选择一个颜色,然后通过 setColor 更新颜色。

如何复用代码呢?

假如我们还需要写另外一个组件,他的功能和 ColoredBanner 组件几乎一样,唯一区别是不需要用户点击,而是设置一个定时器来自动改变背景。

我们不能直接使用 ColoredBanner 组件,因为里面有点击事件的逻辑,只需要 ColoredBanner 中随机更新颜色状态的功能。

很明显需要把 ColoredBanner 组件中随机更新颜色状态的逻辑抽离出来。

怎么做呢?

自定义 Hook。类似于 Higher Order Components (高阶组件)和 Render Props 的处理方式。

随机更新颜色状态的自定义 Hook:

React Hook 提高代码复用性

创建一个名为 useRandomColor 的函数,接收两个参数, colorsinitialColor ,在 changColor() 方法中调用 setColor 钩子函数实现颜色的更新。这样自定义 Hook 就实现了。

ColoredBanner 组件中使用:

React Hook 提高代码复用性

调用自定义 Hook useRandomColor ,传入颜色数组和初始化颜色,解构返回 colorchangeColorColoredBanner 组件就可以通过这个自定义 Hook 来随机改变背景颜色了。

同理,利用这个 Hook 来实现自动更换随机背景颜色的组件。达到代码复用的目的。

自定义 Hook 除了能提高代码复用性,还带来了另一个好处,可以把项目中嵌套很深的 state,拆成一个个小的 Hook,既可以避免更新失效的问题,又方便后期的扩展和维护。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux内核完全剖析

Linux内核完全剖析

赵炯 / 机械工业出版社 / 2006-1 / 79.00元

本书对早期Linux操作系统内核全部代友文件进行了详细的剖析,旨在让读者在尽量短的时间内对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux系统打下坚实的基础。虽然选择的版本较低,但该内核已能够正常编译运行,并且其中已包括了Linux工作原理的精髓。书中首先以Linux源代码版本的变迁为主线,简要介绍了Lin-ux系统的发展历史,同时着重说明了各个内核版本之间的主要区别和改进方......一起来看看 《Linux内核完全剖析》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具