Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

通过自定义 Hook,可以将组件逻辑提取到可重用的函数中。自定义 Hook 是一个函数,其名称以 “use” 开头,函数内部可以调用其他的 Hook。

我们要写一个Hook,先要思考它应该具备哪些功能。获取接口数据需要一个超时时间跟踪加载的状态,接口可能本身报错,我们需要进行错误处理。然后编写函数确定输入的参数和输出的结果。

import React, { useState } from 'react';function useFetchData(utl, timeout) {const [data, setData] = useState([]);const [loading, setLoading] = useState(false)const [error, setError] = useState(false)return [data, loading, error]
}

1.我们定义了useFetchData函数,该函数根据自定义Hook命名,并接收url和timeout值2.使用useState定义了请求数据,加载状态和错误状态3.最后返回所有状态变量

接下来开始发送请求

function useFetchData(url, timeout) {const [data, setData] = useState([]);const [loading, setLoading] = useState(false)const [error, setError] = useState(false)async function load() {setLoading(true);try {const instance = axios.create();const result = await instance.get(url, { timeout });setData(result)} catch (error) {setError(true)}setLoading(false)}return [data, loading, error, load]
}

1.我们将loading设置为true,并且仅在此函数的最后将其设置为false2.我们在实际API调用周围使用了一个try…catch块来捕获所有错误3.我们使用axios库向URL发出实际请求,并提供超时值4.如果获取数据成功,则将数据设置为结果,如果数据获取失败,则将error设置为true

如果仅在函数组件声明中调用load函数会发生什么?该函数将更改组件的状态,从而触发重新渲染,这将再次执行加载,并…

因此,需要从外部调用该函数-我们需要将其导出到使用此钩子的组件。

每当调用该组件时,都应将其状态重置为初始值。

function useFetchData(url, timeout) {const [data, setData] = useState([]);const [loading, setLoading] = useState(false)const [error, setError] = useState(false)function init() {setData([])setLoading(false)setError(false)}async function load() {init()setLoading(true);try {const instance = axios.create();const result = await instance.get(url, { timeout });setData(result)} catch (error) {setError(true)}setLoading(false)}return [data, loading, error, load]
}

目前为止,在 React 中有两种流行的方式来共享组件之间的状态逻辑: render props 和高阶组件,现在 Hook 也可以让你不增加组件的情况下解决相同问题的。

React:创建用于获取数据的自定义Hook相关推荐

  1. 企业微信朋友圈操作流程,发送获取数据,企业微信hook,企业微信群发接口,企业微信第三方接口。

    企业微信营销接口. 企业微信web端 通过dll扩展 实现发送朋友圈功能 请求说明: syncKey 是 string 同步key 发送朋友圈实例: {"type":110003, ...

  2. React通过Ajax获取数据

    eact 组件的数据可以通过 componentDidMount 方法中的 Ajax 来获取,当从服务端获取数据库可以将数据存储在 state 中,再用 this.setState 方法重新渲染 UI ...

  3. React之Hook(六)——自定义 Hook

    通过自定义 Hook,可以将组件逻辑提取到可重用的函数中. 在我们学习使用 Effect Hook 时,我们已经见过这个聊天程序中的组件,该组件用于显示好友的在线状态: import React, { ...

  4. 在React中获取数据

    React初学者经常从不需要获取数据的应用开始.他们经常面临一个计数器,任务列表获取井字棋游戏应用.这是很好的,因为在开始学习React的时候,数据获取在你的应用中添加了另一层复杂度. 然而,有些时候 ...

  5. extjs中store获取后台数据_Excel实战技巧64: 从工作簿中获取数据(不使用VBA)

    学习Excel技术,关注微信公众号: excelperfect 这是在研读<Escape From Excel Hell>时学到的技术,从本工作簿中或者其他工作簿中获取所需要的数据,以便于 ...

  6. React 全家桶(react脚手架 redux react-redux react-router-dom ui库 reactHook)含 自定义hook的方法及使用

    文章目录 React 入门 React 简介 React 为何物 为何学习 React React 初体验 来一发 Hello React 创建虚拟 DOM 的两种方式:JS 和 JSX 虚拟 DOM ...

  7. 揭秘 React 异步获取数据的进化历程

    点击上方 前端瓶子君,关注公众号 回复算法,加入前端编程面试算法每日一题群 本篇文章,以模拟从『Hacker News API[1]』获取热门文章为例,通过一步步地代码优化和封装,阐述 React 异 ...

  8. React Hooks的使用(三)——useRef、useImperativeHandle、useLayoutEffect解析、自定义Hook

    一.useRef useRef返回一个ref对象,返回的ref对象再组件的整个生命周期保持不变. 最常用的ref是两种用法: 用法一:引入DOM(或者组件,但是需要是class组件)元素: 案例一:引 ...

  9. Impala介绍,Impala架构,Impala安装,impala Shell ,分区创建,refresh,load数据,获取数据的元数据

    1 Impala Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBASE中的PB级大数据.已有的Hive系统虽然也提供了SQL语义, ...

最新文章

  1. Java Socket
  2. jvm在创建对象时采用哪些并发安全机制
  3. C#学习 小知识_多态的简单实现_2018Oct
  4. XJTLU Outstanding Student for 2017-2018!
  5. dict取值_Python基础数据类型「list、tuple、dict」
  6. Oracle SQL的优化 【转】
  7. 做副业(初创业),逻辑其实很简单,无非这两个方向
  8. java程序设计_Java程序设计-类和对象(笔记)
  9. Mac 屏幕可不可以用酒精清洁?正确清洁 Mac 的方法
  10. linux怎么查找bin文件内容,[转载]Linux 文件、内容查找(递归) ,grep ,find
  11. Could not initialize class com.android.build.gradle.internal.VariantManager解决方案
  12. 做一款微信小程序到底需要多少钱?
  13. android 各个手机型号的功放和听筒模式的研究
  14. OpenCV读取显示图片报错size.width>0
  15. 架构师工程攻城略地需要具备的八大核心能力
  16. C语言读书1000字报告,c语言实验一实验报告1000字范文.docx
  17. 腾讯优测-优社区干货精选 | android开发在路上:少去踩坑,多走捷径(上)
  18. 细胞膜包覆的介孔铜/锰硅酸盐纳米球(mCMSNs)|黑磷量子点纳米囊泡(BPQD-CCNVs)
  19. 数学管理联考-质数和合数
  20. 未查询到服务器角色信息,dcdiag结果如果排查:拥有 PDC 角色的服务器已关闭。无法找到时间服务器。 - 网络管理论坛 - 51CTO技术论坛_中国领先的IT技术社区...

热门文章

  1. 疫情之后,人工智能该如何走?
  2. 科技行业的起步时代已结束
  3. 表弟励志做程序员了,除了霸王我还能给他什么?
  4. 在编程中,为何说数据仍占主导地位?
  5. 25 年 IT 老兵零基础写小说,作品堪比《三体》| 人物志
  6. 谷歌再现大规模宕机!
  7. 如何将三万行代码从 Flow 移植到 TypeScript?
  8. 挨批评了!Chrome 对用户隐私保护还不如 IE?
  9. 腾讯二十年了,马化腾定了个新方向!
  10. Java、JS、C++ 依然强势,Go、Kotlin 等新语言为何不能破局?