本文字数:6539

预计阅读时间:18分钟

建议阅读方式:收藏备用

温馨提示:最近全国大幅降温,注意防寒保暖,开心跨年

长按识别,后台回复 “电子书” 即可领取《JavaScript高级程序设计(第4版)》React、Vue 、算法等相关电子书

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

在React开发中,保持干净的代码风格,可读性,可维护性,更少的代码行以及可重用性至关重要。本篇文章将向您介绍应立即开始使用的十一个React Hook库。不用再拖延了,让我们开始吧。

1.use-http

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

它提供的主要功能是:

  • 请求/响应拦截器
  • 支持React Native
  • 卸载组件时中止/取消挂起的http请求
  • 缓存

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

官网地址:

https://use-http.com/#/

使用案例

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 Todobutton>
{error && 'Error!'}
{loading && 'Loading...'}
{todos.map(todo => (<span key={todo.id}>{todo.title}span>
)}>
);
};

2.useMedia

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

它提供了支持TypeScript编写。该软件包具有定义明确的文档,其中解释了挂钩的用法以及测试方法。

地址:

https://github.com/streamich/use-media

使用案例:

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

3.Constate

Constate是一个hook package,可将本地状态提升到React Context。这意味着可以以最小的努力轻松地将任何组件的任何状态提升到上下文。如果您想在多个位置使用相同的状态,或者为多个组件提供相同的状态,这很有用。该名称来自合并上下文和状态的文字游戏。使用Typescript写的,体积很小。虽然该文档不是很详细,但是可以完成工作。

地址:

https://github.com/diegohaz/constate

使用案例:

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

4.Redux hooks

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

提供的最著名的hooks是:

  • useSelector
  • useDispatch
  • useStore

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

地址:

https://github.com/reduxjs/redux

使用案例:

import {useSelector, useDispatch} from "react-redux";import React from "react";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 +1button>div>
);
};

5.React hook form

React hook form是一个与Formik和Redux表单相似的表单校验hook库,但是更好!凭借其更简单的语法,速度,更少的转译和更好的可维护性,它开始爬上GitHub的阶梯。它的体积很小,并且考虑到性能而构建。该库甚至提供了它的表单生成器,这很棒!它是React钩子库(14.8k)中GitHub启动数量最多的平台之一。

它提供的主要功能:

  • 非受控表单校验
  • 以性能和开发体验为基础构建
  • 迷你的体积而没有其他依赖
  • 遵循 html 标准进行校验
  • 与 React Native 兼容
  • 支持浏览器原生校验

地址:

https://github.com/react-hook-form/react-hook-form

使用案例:

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 表示一个用于去抖的小钩子。它用于将功能执行推迟到以后。常用于获取数据的输入和表格中。

地址:

https://github.com/xnimorz/use-debounce

使用案例:

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><inputdefaultValue={"Hello"}onChange={(e) => {
setText(e.target.value);
}}
/><p>Value: {text}p><p>Debounced value: {value}p>div>
);
}

7.useLocalStorage

useLocalStorage是一个小钩子,与上面的钩子一样。这对于在localStorage中提取和设置数据非常有用。操作变得容易。提供跨多个选项卡的自动JSON序列化和同步,并以TypeScript编写,因此它提供了类型。

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

地址:

https://github.com/rehooks/local-storage

使用案例:

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 Mebutton>div>
);
}

8.usePortal

usePortal 使创建下拉菜单,模态,通知弹出窗口,工具提示等变得非常容易!它提供了在应用程序的DOM层次结构之外创建元素的信息(react docs)。该钩子与SSR一起使用,因为它是同构的。用TypeScript编写并具有内置状态。它还提供了portals样式和大量其他选项的完全定制。

为此编写的文档非常好,其中显示了许多示例,这些示例对于开始使用库/自己做钩子来说绰绰有余。

地址:

https://github.com/alex-cory/react-useportal

使用案例:

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 Portalbutton>
{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

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

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

地址:

https://github.com/andrewbranch/react-use-hover

使用案例:

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

10.React router hooks

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

它提供的主要功能是:

  • useHistory
  • useLocation
  • useParams
  • useRouteMatch

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

文档很好,写了很多例子

地址:

https://github.com/ReactTraining/react-router

使用案例:

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 homebutton>div>
);
}

11.react-use

react-use是一个必不可少的 React Hooks集合.你需要安装React 16.8.0或更高版本才能使用Hooks API。

地址:

github.com/streamich/react-use

使用案例:

import {useBattery} from 'react-use';const Demo = () => {const state = useBattery();return (<pre>
{JSON.stringify(state, null, 2)}pre>
);
};

当前还有更多的钩子库,找到适合自己使用的就是最好的,不仅提高了开发的效率,而且让代码更加整洁,简单。

往期推荐

周末看世界 | 阿里被立案调查的背后,真的是因为垄断吗?

【大结局】4W字,从零开始,深度学习Webpack (终篇)

4W字,从零开始,深度学习Webpack(中篇)

4W字,从零开始,深度学习Webpack(上集)

❤️文末福利

1.【关注,【每天】为你分享实用干货, 免费[赠书、送红包]

2.公众号内,回复关键字免费获取上百本前端电子书、简历模板、视频会员

3.添加个人微信邀请进【校招内推摸鱼、网课共享】群,超多福利,等你来撩

“点赞和在看”是最大的支持

slqite3库查询数据处理方式_绝活!十一个优质React Hook库, 收藏备用相关推荐

  1. slqite3库查询数据处理方式_SQLite3命令操作大全

    SQLite3命令操作大全 SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.ql ...

  2. slqite3库查询数据处理方式_SQLite数据库使用 常用命令

    在命令行操作使用SQL语句操作SQLite数据库 1)安装Sqlite sudo apt-get install sqlite3 2)在终端输入"sqlite3"进入命令行操作界面 ...

  3. slqite3库查询数据处理方式_C语言实现sqlite3数据库查询的基本方法

    sqlite回传函数相关说了3种基本方法:callback,gettable和预处理stmt方法 下面给出测试代码和测试用数据库,代码如下 #include #include #include #in ...

  4. mysql子查询的方式_分布式系统中一种迭代处理MYSQL子查询的方法

    1.技术背景 1.1 背景技术 在分布式mysql中间件系统,DML语句中,子查询需要可能涉及到多个数据分片,如果在DML语句使用子查询,需要首先解析出子查询的具体内容,然后根据路由把子查询发往到各个 ...

  5. python中的库有哪些餐厅_推荐一些实用的的 Python 库

    Python Python开发 Python语言 推荐一些实用的的 Python 库 一门语言好用.方便的程度在很多时候会取决于这门语言相关的库够不够丰富,Python 之所以火爆除了其本身的语法和特 ...

  6. mysql单台跨数据库查询_在MySQL中怎样进行跨库查询?

    在MySQL中跨库查询主要分为两种情况,一种是同服务的跨库查询:另一种是不同服务的跨库查询:它们进行跨库查询是不同的,下面就具体介绍这两种跨库查询. 一.同服务的跨库查询 同服务的跨库查询只需要在关联 ...

  7. sqlserver垮库查询_sql跨库查询(sqlserver跨库查询)

    sql跨库查询(sqlserver跨库查询) 2020-07-24 11:56:42 共10个回答 首先你的要求不明确..要是按照你的要求的话以下语句就可以解决了跨库中只要用.来表示就可以了db.ta ...

  8. 在MySQL中怎样进行跨库查询?

    在MySQL中跨库查询主要分为两种情况,一种是同服务的跨库查询:另一种是不同服务的跨库查询:它们进行跨库查询是不同的,下面就具体介绍这两种跨库查询. 一.同服务的跨库查询 同服务的跨库查询只需要在关联 ...

  9. 微服务跨数据库联合查询_微服务架构下,解决数据库跨库查询的一些思路

    加关注,不迷路! 前言 在服务做微服务改造后,原先单库join查询已经不能满足要求,每个拆分的微服务对应一个数据库实例,而且部署在不同的服务器上,那么解决"跨库查询"就势在必行了. ...

最新文章

  1. 模型的跨界:我拿Transformer去做目标检测,结果发现效果不错
  2. 曹长树:江湖小虾米的侠客行——我的大数据能力修炼得道之路 | 提升之路系列...
  3. 一文了解 lambda 用法与源码分析
  4. div后来居上 html,【CSS】误解:后来居上??有时这是错的
  5. 打包指令_Linux系统常用指令总结
  6. Java 调用 Python 方法学习笔记
  7. 力扣203,移除链表元素(JavaScript)
  8. node.js打开指定浏览器的四种方式
  9. sql broker_使用SQL Server Service Broker进行异步处理
  10. Java设计模式------工厂模式-------工厂方法模式
  11. promise重新认识
  12. SQLyog 注册码(包含企业版注册码)
  13. JavaScript设计模式详解:01、导学
  14. Excel 科学计数法数值转换
  15. 几个比较好用的爬虫库
  16. 怎样用手机计算机打出分数,分数怎么打出来
  17. namecheap,namesilo域名注册优势,国外域名注册,2018 namesilo注册优惠码
  18. 微信公众号 第三方登录 获取微信用户信息(java版)
  19. AWS【亚马逊云】的EC2以及VPC网络框架介绍
  20. 空调房早餐三杯水 让你轻松获得七大类营养

热门文章

  1. ComboGrid 行内点击编辑内容
  2. bootstrap模态框垂直居中显示
  3. Service Locator Pattern in C# with Lazy Initialization(转)
  4. 获取GridView中RowCommand的当前索引行
  5. Flutter 页面托动按钮 DraggableFloatingActionButton
  6. express框架+fetch/axios.js(本机实现跨域请求)
  7. JavaScript中子类调用父类方法的实现
  8. Qt: error lnk1158 无法运行rc.exe
  9. tcp 出现rst情况整理
  10. javascript 处理HTML元素必须避免使用的一种方法