react常用Hooks

Hooks是可从函数组件“挂钩”到React状态和生命周期功能的函数。 Hooks在class中是无效的——可在没有class的情况下使用React。(不推荐重写已有组件,但是如果愿意,可以在一些新的组件中使用 Hooks。)React提供一些内置的 Hooks,比如useState。用户也可以创建自己的 Hooks,以在不同组件之间重复使用有状态的行为。(来源于 React文档的描述)

1. react-fetch-hook

react-fetch-hook 是用于便捷使用Fetch API的React Hooks。这个程序包包括以下内容:

· Tiny(397B) — 按大小限制计算

· 包括 Flow 和 TypeScript 类型

react-fetch-hook

准备开始

Yarnyarn add react-fetch-hookNPMnpm i react-fetch-hook --save使用import React from "react";import useFetch from "react-fetch-hook";const Component = () => {const { isLoading, data } =useFetch("https://swapi.co/api/people/1");return isLoading ? (<div>Loading...</div>) : (<UserProfile {...data} />);};useFetch 接收与fetch函数同样的参数。自定义格式化程序默认格式化程序是 response => response.json() 。可以这样传递自定义格式化程序:const { isLoading, data } =useFetch("https://swapi.co/api/people/1", {formatter: (response) =>response.text()});多个请求支持在同一文件/组件里的多个useFetch示例:const result1 = useFetch("https://swapi.co/api/people/1");const result2 = useFetch("https://swapi.co/api/people/2");if(result1.isLoading && result2.isLoading) {return<div>Loading...</div>;} return <div><UserProfile {...result1.data}/><UserProfile {...result2.data}/></div>

2. @rehooks/window-scroll-position

@rehooks/window-scroll-position是用于决定窗口-滚动位置的ReactHooks。当用户根据滚动动作对对象进行动画处理时,Hooks用处颇大。

@rehooks/window-scroll-position

安装

yarn add@rehooks/window-scroll-position

使用

Yarnyarn add react-fetch-hookNPMnpm i react-fetch-hook --save使用import React from "react";import useFetch from "react-fetch-hook";const Component = () => {const { isLoading, data } =useFetch("https://swapi.co/api/people/1");return isLoading ? (<div>Loading...</div>) : (<UserProfile {...data} />);};useFetch 接收与fetch函数同样的参数。自定义格式化程序默认格式化程序是 response => response.json() 。可以这样传递自定义格式化程序:const { isLoading, data } =useFetch("https://swapi.co/api/people/1", {formatter: (response) =>response.text()});多个请求支持在同一文件/组件里的多个useFetch示例:const result1 = useFetch("https://swapi.co/api/people/1");const result2 = useFetch("https://swapi.co/api/people/2");if(result1.isLoading && result2.isLoading) {return<div>Loading...</div>;} return <div><UserProfile {...result1.data}/><UserProfile {...result2.data}/></div>

3. @rehooks/local-storage

@rehooks/local-storage 是负责同步本地存储的React Hooks。

@rehooks/local-storage

安装

Yarn

yarn add @rehooks/local-storage

NPM

npm i @rehooks/local-storage

使用

writeStorage:可以在应用程序中任何地方。import React from 'react';import { writeStorage } from '@rehooks/local-storage';let counter = 0;constMyButton = () => (<button onClick={_ =>writeStorage('i', ++counter)}>Click Me</button>);useLocalStorage:该组件将从本地储存中接收更新。import React from 'react';import { useLocalStorage } from '@rehooks/local-storage';function MyComponent(){const [counterValue] =useLocalStorage('i'); // send the key to be tracked.return (<div><h1>{counterValue}</h1></div>);}deleteFromStorage: 也可以从本地储存中删除项目。import { writeStorage,deleteFromStorage } from '@rehooks/local-storage';writeStorage('name', 'HomerSimpson'); // Add an item firstdeleteFromStorage('name'); // Deletes theitemconst thisIsNull = localStorage.getItem('name'); // This is indeed null完整示例import React from 'react';import ReactDOM from 'react-dom';import { writeStorage, deleteFromStorage, useLocalStorage } from'@rehooks/local-storage';const startingNum = 0;const App = () => {const [getNum, setNum] =useLocalStorage('num'); return (<><p>{getNum}</p><button onClick={_ =>setNum(getNum ? getNum + 1 : 0)}>Increment</button><button onClick={_ =>deleteFromStorage('num')}>Delete</button></>);};// Assuming there is a div in index.html with an ID of 'root'ReactDOM.render(<App />, document.getElementById('root'));@rehooks/local-storage API 文档可以从这里找到。

4. react-use-form-state

在React中管理表单状态有时候可能有些难以处理。现在已经有很多好的方法轻松解决这一问题。然而,其中的许多方法中包含了大量可能最终都没有用过的特性,并且/或者需要传递一些额外的字节。

幸运的是,最近对React Hooks的引进和编写自定义 Hooks的能力已经为分享状态逻辑提供了新的可能性。表单状态也不例外。

react-use-form-state 是一个小React Hooks,其尝试使用用户熟悉的本地表单输入元素来简化管理表单状态。

react-use-form-state

准备开始

首先,在项目中添加react-use-form-state :

npminstall --save react-use-form-state

请注意, react-use-form-state 需要 react@^16.8.0作为一个对等依赖。

基本用法

import { useFormState } from'react-use-form-state';export default function SignUpForm({ onSubmit }) {

const [formState, { text, email,password, radio }] = useFormState(); functionhandleSubmit(e) {

// ...

} return (

<form onSubmit={handleSubmit}>

<input {...text('name')} />

<input {...email('email')}required />

<input {...password('password')}required minLength="8" />

<input {...radio('plan','free')} />

<input {...radio('plan','premium')} />

</form>

);

}

由以上例子,当用户填写表单时,formState对象内容如下:

{

values: {

name: 'Mary Poppins',

email: 'mary@example.com',

password: '1234',

plan: 'free',

},

touched: {

name: true,

email: true,

password: true,

plan: true,

},

validity: {

name: true,

email: true,

password: false,

plan: true,

},

errors: {

password: 'Please lengthen this textto 8 characters or more',

},

clear: Function,

clearField: Function,

reset: Function,

resetField: Function,

setField: Function,

}

初始状态

useFormState 需要一个初始状态对象,其键与输入名称匹配。

export default functionRentCarForm() {

const [formState, { checkbox, radio,select }] = useFormState({

trip: 'roundtrip',

type: ['sedan', 'suv', 'van'],

});

return (

<form>

<select {...select('trip')}>

<optionvalue="roundtrip">Same Drop-off</option>

<optionvalue="oneway">Different Drop-off</option>

</select>

<input {...checkbox('type','sedan')} />

<input {...checkbox('type','suv')} />

<input {...checkbox('type','van')} />

<button>Submit</button>

</form>

);

}

5. @rehooks/component-size

@rehooks/component-size是一个决定组件大小的React Hooks。当调整响应式图片和组件大小需要局部刷新时十分有用。

@rehooks/component-size GitHub page

安装

yarn add @rehooks/component-size

使用

import { useRef } from 'react'import useComponentSize from '@rehooks/component-size'function MyComponent() {let ref = useRef(null)let size = useComponentSize(ref)// size == { width: 100, height: 200 }let { width, height } = sizelet imgUrl =`https://via.placeholder.com/${width}x${height}` return (<div style={{ width: '100%',height: '100%' }}><img ref={ref} src={imgUrl}/></div>)}

注意:ResizeObserver是用来决定是否调整元素大小的API(应用程序编程接口)。Chrome的浏览器支持更优越,然而其他主流浏览器却缺乏这一功能。

ResizeObserver browser support

6. use-onclickoutside

这是一个用于监听元素外部点击的React Hooks。在与模态窗口、弹出窗口、警报或者配置文件导航的结合中,这种 Hooks十分有用。

use-onclickoutside

入门指南

Yarn

yarn add use-onclickoutside

用法

创建一个ref并把它传递给useOnClickOutside Hooks。

import { useRef } from 'react'import useComponentSize from '@rehooks/component-size'function MyComponent() {let ref = useRef(null)let size = useComponentSize(ref)// size == { width: 100, height: 200 }let { width, height } = sizelet imgUrl =`https://via.placeholder.com/${width}x${height}` return (<div style={{ width: '100%',height: '100%' }}><img ref={ref} src={imgUrl}/></div>)}

请注意useRef的用法,它是由标准React包提供的标准ReactHooks。

useRef返回一个可变的ref对象,其.current特性被初始化为传递的参数(initialValue)。这个返回的对象将持续存在于整个组件的生命周期。

大家有木有学习到?掌握这些,做一个快乐的程序员吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5G NR无线蜂窝系统的信道估计器设计

文章目录 DMRS简介DMRS类型DMRS频域密度 信道估计实验仿真实验参数实验实验结论 DMRS简介 DMRS类型 类型A&#xff1a;DMRS位于时隙的第二个或第三个OFDM符号&#xff0c;由14个OFDM符号组成&#xff0c;当数据占据大部分时隙时使用A型映射。 类型B&#xff1a;用在URLLC中&a…

鸿蒙系列--组件介绍之其他基础组件(上)

上回介绍了基础组件中最常用的组件常用的基础组件&#xff0c;接下来还有其他基础组件 一、Blank 描述&#xff1a;空白填充组件 功能&#xff1a;在容器主轴方向上&#xff0c;具有自动填充容器空余部分的能力。只有当父组件为Row/Column时生效 子组件&#xff1a;无 Blan…

Spring之提前编译:AOT

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

【Java进阶篇】深拷贝和浅拷贝的理解(保姆级文献)

✔️深拷贝和浅拷贝的理解 在计算机内存中&#xff0c;每个对象都有一个地址&#xff0c;这个地址指向对象在内存中存储的位置。当我们使用变量引用一个对象时&#xff0c;实际上是将该对象的地址赋值给变量。因此&#xff0c;如果我们将一个对象复制到另一个变量中&#xff0c…

一台服务器​最大并发 tcp 连接数多少?65535?

首先&#xff0c;问题中描述的65535个连接指的是客户端连接数的限制。 在tcp应用中&#xff0c;server事先在某个固定端口监听&#xff0c;client主动发起连接&#xff0c;经过三次握手后建立tcp连接。那么对单机&#xff0c;其最大并发tcp连接数是多少呢&#xff1f; 如何标…

机械革命极光Pro重装Win10系统图解

机械革命极光Pro是性能优秀的笔记本电脑&#xff0c;深受广大用户的喜欢&#xff0c;现在用户想给笔记本电脑重新安装一下操作系统&#xff0c;但不知道重装系统的详细步骤。下面小编将带来机械革命极光Pro笔记本电脑重装系统Win10版本的步骤介绍&#xff0c;帮助更多的用户完成…

Elasticsearch:无需搜索 “Christmas” 即可找到有关圣诞节的书籍

随着假期的临近&#xff0c;我期待着变得舒适&#xff0c;拿起一本新书&#xff0c;享受轻松的时光。 但是使用搜索栏在线发现图书并不像看起来那么容易......大多数零售搜索引擎仅依赖于关键字搜索&#xff0c;当我们确切地知道我们正在寻找什么书名时&#xff0c;这很好&…

分布式事务是什么

分布式事务是企业集成中的一个技术难点&#xff0c;也是每一个分布式系统架构中都会涉及到的一个东西&#xff0c;特别是在微服务架构中&#xff0c;几乎可以说是无法避免&#xff0c;本文就分布式事务来简单聊一下。 数据库事务 我们先从数据库事务说起。数据库事务可能大家…

【大数据存储与处理】开卷考试总复习笔记

实验部分 一、 HBase 的基本操作 1. HBase Shell入门 # 进入HBase Shell环境 hbase shell2. HBase创建数据库表 # 创建表命令 create user, info1, info2 # 查看所有表 list # 查看表结构 describe user3. HBase数据操作 数据插入 put user, 0001, info1:name, jack put us…

傻瓜式教学Docker 使用docker compose部署 php nginx mysql

首先你可以准备这个三个服务,也可以在docker compose 文件中 直接拉去指定镜像,这里演示的是镜像服务已经在本地安装好了,提供如下: PHP # 设置基础镜像 FROM php:8.2-fpm# install dependencies RUN apt-get update && apt-get install -y \vim \libzip-dev \libpng…

智慧医疗平台开发:在线问诊系统源码搭建详解

如今&#xff0c;在线问诊系统的出现为患者提供了更为灵活、便捷的医疗服务。我们在开发系统之前&#xff0c;应该先简单了解系统的功能以及相关的技术。 一、核心功能需求 -用户注册和登录&#xff1a;用户可以通过注册账户&#xff0c;或者使用第三方登录方式进入系统。 …

高速风筒4套硬件案子谁会成为王者----【其利天下技术】

关于高速风筒的硬件电路&#xff0c;从MCU的角度来说&#xff0c;严格意义上是可以区分为四种硬件电路的&#xff0c;当前市场上这四种硬件电路也是并行存在的。所以有朋友电话问我&#xff0c;我怎么看待这四种硬件方案的优劣势和未来的&#xff1f;今天特意根据个人视角&…

基层医疗卫生信息可视化:Flask、MySQL、Echarts的综合利用

基层医疗卫生信息可视化&#xff1a;Flask、MySQL、Echarts的综合利用 正文&#xff1a; 社区卫生健康数据可视化是提升医疗服务水平和促进健康管理的有效手段。本文将介绍一种基于Flask、MySQL和Echarts技术的社区卫生健康数据可视化系统&#xff0c;数据源来自市基层医疗卫生…

Apache RocketMQ,构建云原生统一消息引擎

本文整理于 2023 年云栖大会林清山带来的主题演讲《Apache RocketMQ 云原生统一消息引擎》 演讲嘉宾&#xff1a; 林清山&#xff08;花名&#xff1a;隆基&#xff09;&#xff0c;Apache RocketMQ 联合创始人&#xff0c;阿里云资深技术专家&#xff0c;阿里云消息产品线负…

智能优化算法应用:基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.孔雀算法4.实验参数设定5.算法结果6.参考文献7.MA…

Crowd Counting近期研究(附代码资源)

1.Semi-Supervised Crowd Counting with Contextual Modeling: Facilitating Holistic Understanding of Crowd Scenes paper:https://arxiv.org/abs/2310.10352 code:https://github.com/cha15yq/MRC-Crowd 摘要&#xff1a; 为了减轻训练可靠的人群计数模型所需的繁重标注…

二分查找——OJ题(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、点名1、题目讲解2、算法原理3、代码实现 二、搜索旋转排序数组中的最⼩值1、题目讲解2、算…

rime中州韵 程序配置结构讲解 保姆级教程

在完成了 Rime 引擎/框架的安装&#xff0c;并安装了基础输入方案后&#xff0c;我们就可以在这个基础上开始 DIY 了。毕竟&#xff0c;Rime 最大的优势就是可定制性强。 但是&#xff0c;在我们 DIY 前&#xff0c;我们需要先做些准备工作。磨刀不误砍柴工&#xff0c;我们需…

Javaweb见解

1 web相关的概念 1.1 软件的基本架构 C/S(Client-Server)。比如我们手机上的app QQ软件 飞秋 特点&#xff1a;必须下载特定的客户端程序。服务端升级之后&#xff0c;客户端也需要随着升级。 B/S(Broswer-Server).比如京东网站&#xff0c;腾讯qq官方网站 特点&#xff1…

一文搞清楚Java BytesToAscii和AsciiToBytes

文章目录 BytesToAsciiAsciiToBytes10进制和16进制byte对比 bytes2HexString和hexStringToBytes测试 BytesToAscii Testpublic void convertBytesToAscii() {byte[] bytes new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };String asciiString new String(bytes);System.out.pri…