十大React Hook库

React Hook来了,并在暴风雨中占领了React社区。自最初发布以来已经有一段时间了,这意味着有很多支持库。在搜索与React相关的内容时,很难不看到“ hook”这个词语。如果你还没有遇到的话,应该尽快将它们加入代码库学习起来。它们将使您的编码生活变得更加轻松和愉快。

在React开发中,保持干净的代码风格,可读性,可维护性,更少的代码行以及可重用性至关重要。该博客将向您展示应当被立即开始使用的十大React Hook库。不用再拖延了,让我们开始吧。

1.use-http

use-http是一个非常有用的库,可用来替代Fetch API。它使您的编码更简单易懂,更精确地讲是数据操作部分。use-http本身使用TypeScript,甚至支持SSR和GraphQL。它返回响应,加载,错误数据和不同的请求方法,例如Get,Post,Put,Patch和Delete。

它提供的主要功能是:

  • 请求/响应拦截器
  • 暂停(目前处于实验状态)
  • 重发功能
  • 缓存

CodeSandbox示例和Youtube视频以及GitHub自述文件都对此进行了很好的记录。

用法示例:

import useFetch from "use-http"

const Example = () => {
const [todos, setTodos] = useState([])
const { get, post, response, loading, error } = useFetch("https://example.com") useEffect(() => { get("/todos") }, []) const addTodo = async () => {
await post("/todos", { title: "example todo" });
if (response.ok) setTodos([...todos, newTodo])
} return (
<>
<button onClick={addTodo}>Add Todo</button>
{error && 'Error!'}
{loading && 'Loading...'}
{todos.map(todo => (
<span key={todo.id}>{todo.title}</span>
)}
</>
);
};

2. useMedia

您是否需要一种跟踪CSS媒体查询的方法?useMedia提供一个简单的方法解决这个问题。这是一个能够准确跟踪的感官钩子。在任何应用程序或网站上,媒体查询以及响应能力都非常重要。

它以TypeScript编写。该软件包具有定义明确的文档,它的用法以及测试方法也解释的非常好。

用法示例:

import useMedia from 'use-media';

const Example = () => {
const isWide = useMedia({minWidth: '1000px'}); return (
<span>
Screen is wide: {isWide ? "WideScreen" : "NarrowScreen"}
</span>
);
};

3.Constate

Constate可将本地状态提升到React Context。这意味着可以以最小的努力轻松地将任何组件的任何状态提升到上下文。如果您想在多个位置使用相同的状态,或者为多个组件提供相同的状态,这很有用。该名称来自合并Context和state

它是基于typescript实现的,而且库非常的小。虽然该文档不是很详细,但是看例子,我们就可以轻易地学会使用。

用法示例:

import React, { useState } from "react";
import constate from "constate"; // custom hook
function useCounter() {
const [count, setCount] = useState(0);
const increment = () => setCount(prevCount => prevCount + 1);
return { count, increment };
} // hook passed in constate
const [CounterProvider, useCounterContext] = constate(useCounter); function Button() {
// use the context
const { increment } = useCounterContext();
return <button onClick={increment}>+</button>;
} function Count() {
// use the context
const { count } = useCounterContext();
return <span>{count}</span>;
} function App() {
// wrap the component with provider
return (
<CounterProvider>
<Count />
<Button />
</CounterProvider>
);

4. Redux hooks

Redux是许多(即使不是全部)React开发人员的知名工具。在整个应用程序中,它用作全局状态管理器。在React的最初版本发布几个月后,它就随hooks而出现了。它通过利用现有的connect()方法 提供了 一种 替代HOC(高阶组件)模式的方法。

提供的最著名的挂钩是:

  • useSelector
  • useDispatch
  • useStore

该文档非常好,虽然有点复杂,但是它将为您提供开始使用它们所需的任何信息。

用法示例:

import  {useSelector, useDispatch} from "react-redux";
import * as actions from "./actions"; const Example = () => {
const dispatch = useDispatch()
const counter = useSelector(state => state.counter) return (
<div>
<span>
{counter.value}
</span>
<button onClick={() => dispatch(actions.incrementCounter)}>
Counter +1
</button>
</div>
);
};

5. React hook form

React hook form是一个表单钩子库,类似于Formik和Redux表单,但是更好!凭借其更简单的语法,速度,更少的重新渲染数和更好的可维护性,它开始爬上GitHub的阶梯。

它的体积很小,并且是考虑到性能而构建起来的。该库甚至提供了非常棒的表单生成器!它是React钩子库中GitHub star数量最多的库之一(14.8k)。

用法示例:

import React from "react";
import { useForm } from "react-hook-form"; function App() {
const { register, handleSubmit, errors } = useForm();
const onSubmit = (data) => {
// logs {firstName:"exampleFirstName", lastName:"exampleLastName"}
console.log(data);
}; return (
<form onSubmit={handleSubmit(onSubmit)}>
<input name="firstName" ref={register} />
<input name="lastName" ref={register({ required: true })} />
{errors.lastName && <span>"Last name is a required field."</span>}
<input name="age" ref={register({ required: true })} />
{errors.age && <span>"Please enter number for age."</span>}
<input type="submit" />
</form>
);
}

6. useDebounce

useDebounce表示一个用于防抖的小钩子。它用于将功能的执行推迟到以后。常用于获取数据的输入框和表格中。

用法示例:

import React, { useState } from "react";
import { useDebounce } from "use-debounce"; export default function Input() {
const [text, setText] = useState("Hello");
const [value] = useDebounce(text, 1000); return (
<div>
<input
defaultValue={"Hello"}
onChange={(e) => {
setText(e.target.value);
}}
/>
<p>Value: {text}</p>
<p>Debounced value: {value}</p>
</div>
);
}

7. useLocalStorage

useLocalStorage是一个小钩子,与上面的钩子一样。它对于在localStorage中提取和设置数据非常有用。使用它之后操作变得很容易。

提供自动JSON序列化和同步的功能

文档以高质量的方式编写,并且通过扩展示例可以完全理解。

用法示例:

import React, { useState } from "react";
import { writeStorage } from '@rehooks/local-storage'; export default function Example() {
let counter = 0;
const [counterValue] = useLocalStorage('counterValue'); return (
<div>
<span>{counterValue}</span>
<button onClick={() => writeStorage('i', ++counter)}>
Click Me
</button>
</div>
);
}

8. usePortal

usePortal使得创建下拉菜单,弹出层,通知弹出窗口,提示等变得非常容易!它提供了在应用程序的DOM层次结构之外创建元素的功能。

它还提供了门户样式和大量其他选项的完全定制。

编写的文档非常好,其中展示了许多示例,这些示例足够用于开始使用库/自己做钩子。

用法示例:

import React, { useState } from "react";
import usePortal from "react-useportal"; const Example = () => {
const { ref, openPortal, closePortal, isOpen, Portal } = usePortal() return (
<>
<button ref={ref} onClick={() => openPortal()}>
Open Portal
</button>
{isOpen && (
<Portal>
<p>
This Portal handles its own state.{' '}
<button onClick={closePortal}>Close me!</button>, hit ESC or
click outside of me.
</p>
</Portal>
)}
</>
)
}

9. useHover

它确定是否正在处于hover的React元素。简单易用。该库很小,易于使用,但如果您有足够的创造力,它可能会很强大。

它还提供了悬停效果的延迟功能。支持TypeScript。虽然文档没有那么详细,但是它将向您展示如何正确地使用它。

用法示例:

import useHover from "react-use-hover";

const Example = () => {
const [isHovering, hoverProps] = useHover();
return (
<>
<span {...hoverProps} aria-describedby="overlay">Hover me</span>
{isHovering ? <div> I’m a little tooltip! </div> : null}
</>
);
}

10. React router hooks

React router 是React最受欢迎的库之一。它用于路由和获取应用程序URL历史记录等。它与Redux一起实现了用于获取此类有用的数据

提供的挂钩有:

  • useHistory
  • useLocation
  • useParams
  • useRouteMatch

它的名字很不言自明。UseHistory将获取应用程序历史记录和方法的数据,例如push一个new route。UseLocation将返回代表当前URL的对象。UseParams将返回当前URL的参数的键-值对的对象。最后,useRouteMatch将尝试将当前URL与给定URL进行匹配,给定URL可以是字符串,也可以是具有不同选项的对象。

文档很好,写了很多例子

用法示例:

import { useHistory, useLocation, useRouteMatch } from "react-router-dom";

const Example = () => {
let history = useHistory();
let location = useLoction();
let isMatchingURL = useRouteMatch("/post/11"); function handleClick() {
history.push("/home");
} return (
<div>
<span>Current URL: {location.pathname}</span>
{isMatchingURL ? <span>Matching provided URL! Yay! </span> : null}
<button type="button" onClick={handleClick}>
Go home
</button>
</div>
);
}

还有更多的钩子库,但是这些是我决定要谈论的。请尝试一下,我保证您不会后悔。如果您确实很喜欢它们,请以任何方式去支持他们。hooks仍然是执行此操作的一种相对较新的方法。在接下来的几个月中,我们希望有更多出色的库和钩子示例浮出水面。

希望您发现这篇文章有趣,并且您学到了一些新东西。在进一步探索hooks中玩得开心!发展愉快。

公众号:《前端阳光》 后台回复加群,欢迎和大佬们交流技术

【译】值得推荐的十大React Hook 库的更多相关文章

  1. 【转载】值得推荐的C/C++框架和库

    原文:值得推荐的C/C++框架和库 值得学习的C语言开源项目 Libevent libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施.其以高效出名,它可以将IO事件,定时 ...

  2. 值得推荐的C/C++框架和库

    值得推荐的C/C++框架和库 [本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 下次造轮子前先看 ...

  3. 值得推荐的C/C++框架和库 (真的很强大) c

    http://m.blog.csdn.net/mfcing/article/details/49001887 值得推荐的C/C++框架和库 (真的很强大) 发表于2015/10/9 21:13:14 ...

  4. 【转】 值得推荐的C/C++框架和库 (真的很强大)

    [转] 值得推荐的C/C++框架和库 (真的很强大) 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个 ...

  5. BigData:值得了解的十大数据发展趋势

    当今,世界无时无刻不在发生着变化.对于技术领域而言,普遍存在的一个巨大变化就是为大数据(Big data)打开了大门,并应用大数据技相关技术来改善各行业的业务并促进经济的发展.目前,大数据的作用已经上 ...

  6. 【转】值得推荐的C/C++框架和库

    偶然间在博客园前辈那里看到的,转载备用,日后研究. 原文链接:http://www.cnblogs.com/findumars/p/6891515.html Webbench是一个在linux下使用的 ...

  7. 1.值得推荐的C/C++框架和库 (转)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

  8. 转:值得推荐的C/C++框架和库(真的很强大)

    目录(?)[+] 值得学习的C语言开源项目 - 1 Webbench - 2 Tinyhttpd - 3 cJSON - 4 CMockery - 5 Libev - 6 Memcached - 7 ...

  9. 值得推荐的C/C++框架和库 (真的很强大)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

随机推荐

  1. Java源码赏析(五)再识 String 类

    在 Java源码赏析(三)初识 String 类   中,我们已经大概理解了String的接口,接下来我们描述一下String的常用工具方法. /** * 为了精简的String结构,之前提到的方法省 ...

  2. RCTF 2019 web

    写在正文前 神仙题,压根不会. 听说跟着神仙的思路走一遍印象会深点,Just mo it .2333 正文 nextphp 整体思路:phpinfo得知存在preload.php文件,并与opcach ...

  3. 图形渲染的大致过程和关于OpenGL渲染管线的一些零碎知识,openglpipeline,vao,vbo,ebo.

    重要!!! OpenGL新人一枚,希望可以再此和大家分享有用的知识,少走弯路 文章会定期更新,把前面几段已经整理过的知识更完后,接下来每周至少会更两次. 文章如果有不对的,理解错误的地方,也非常希望在 ...

  4. 绝了!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!

    Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具,使得使用者无需开发任何代码就配置一个满足需求的接口.整个接口配置.测试.冒烟.发布,一站式都通过 ...

  5. Java基础——消息队列

    1.消息队列的适用场景:商品秒杀.系统解耦.日志记录等 2.使用Queue实现消息对列 双端队列(Deque)是 Queue 的子类也是 Queue 的补充类,头部和尾部都支持元素插入和获取阻塞队列指 ...

  6. Spring 注解形式AOP

    AOP 面向切面编程,通过预编译的方式,在运行期通过动态代理实现一种技术,AOP可实现业务与切面的逻辑分离,降低耦合度 一.注解形式的AOP Aspect:切面 Joinpoint:连接点,要拦截的方 ...

  7. 070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据

    070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据 本文知识点:综合案例-数组移位-从键盘接收数据 说明:因为时间紧张 ...

  8. P5858 「SWTR-03」Golden Sword

    题面: Link 题面有点长,不想粘了,QAQ. 题解: 一句话题意,你有 \(n\) 件物品需要依次放进去,每个物品放进去之后会得到一定的权值,为当前锅炉里面的物品的数量乘以 \(a_i\) 每次在 ...

  9. Camera插件之CinematicCamera介绍

    Camera插件之CinematicCamera 继承自PerspectiveCame 构造函数引用的PerspectiveCamera的构造函数, 代码如下 var CinematicCamera ...

  10. 多测师讲解性能测试_面试题_001高级讲师肖sir

    什么叫做性能测试?1. 软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,所以一般来说性能测试介入的时机是在功能测试完成之后.另外,由定义中的及时性可知性能也是一种指标,可以 ...