使用React Hooks代替类的6大理由( 三 )
虽然我们可以使用渲染props 和高阶组件来解决这个问题 , 但由于我们必须重构组件 , 这会引入额外的成本 , 到头来会变得更麻烦 。
React Hooks 又是怎么做的呢?使用自定义 React Hooks , 你可以提取这些可重用的状态逻辑并分别测试它们 。
我们可以从 ShowCount 示例中提取一个自定义 hook 。
import { useState, useEffect } from "react";export function useCount(serviceSubject) {const [count, setCount] = useState();useEffect(() => {serviceSubject.subscribe((count) => {setCount(count);});return () => {serviceSubject.unsubscribe();};}, [serviceSubject]);return [count, setCount];}
自定义 hook 来共享状态逻辑
使用上面的自定义 hook , 我们可以像下面这样重写 ShowCount 组件 。 注意 , 我们必须将数据源作为参数传递给这个自定义 hook 。
import { useCount } from "./use-count";export function ShowCount(props) {const [count, setCount] = useCount(props.serviceSubject);useEffect(() => {setCount(-1);}, [setCount]);return (Count : {count});}
ShowCount 组件 , 带有数据源参数
请注意 , 我们在父组件 , 而不是 ShowCount 组件中调用 getCounts 。 否则 , serviceSubject 每次运行 ShowCount 时都将有一个新值 , 而我们将无法获得预期的结果 。
结论切换到 React Hooks 的理由有很多 , 但我已经提到了其中一些最令人信服的原因 , 这些足够让我改用 React Hooks 了 。 如果查看官方文档 , 你会发现React Hooks 有很多有趣的功能 。 请大家也谈一谈自己的React Hooks 之旅吧 。
你可以在此处找到完整的源代码 。
原文链接:
关注我并转发此篇文章 , 私信我“领取资料” , 即可免费获得InfoQ价值4999元迷你书 , 点击文末「了解更多」 , 即可移步InfoQ官网 , 获取最新资讯~
- 使用半监督学习从研究到产品化的3个教训
- 企业建站使用服务器好还是虚拟主机好?
- 如何使用 lshw 查看 Linux 设备信息
- 低调使用!超级好用的ePub阅读工具!|PC软件
- 世界上第一台计算机是什么?为什么使用二进制而不是十进制?
- 网络安全:如何使用MSFPC半自动化生成强大的木码?「下集」
- 使用手机,体现着一个人的修养涵养
- 亲自使用一周,华为Mate20 Pro是否值得入手?
- ipad一直插电使用好吗?
- 石头扫地机器人 T7 Pro 使用报告:轻松实现双目避障