我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ReactHooks获取数据实现方法介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ReactHooks获取数据实现方法介绍

前言

react16.8推出hooks更好的支持函数组件,使用函数组件更容易进行代码的复用,拓展性更强。

useState

useState类似于class组件的state功能,用于更新视图

import React, { Component, useState } from 'react';
export default function Hello() {
  const [count, setCount] = useState(0); //设置默认值为0
  return <div>
    {count}
    <button onClick={()=>setCount(count + 1)}>增加</button>
  </div>
}
//useState还可以使用函数进行赋值
 const [count, setCount] = useState(()=>0); //设置默认值为0

useEffect

useEffect接受两个参数,第一个参数是要执行的回调函数,第二个参数是依赖的参数,如下面的例子里只有当count发生变化的时候才会打印count,当第二个参数为空数组的时候,组件在渲染完成后会执行一次,第二个参数不传递的时候每次渲染都会执行

export default function Hello() {
  const [count, setCount] = useState(() => 0); //设置默认值为0
  // useEffect
  useEffect(() => {
  }, [count])
  return <div>
    {count}
    <button onClick={() => setCount(count + 1)}>增加</button>
  </div>
}

带有返回值的useEffect用于清除执行过程中的副作用

  useEffect(()=>{
    const timer = setInterval(() => {
      console.log(count);
    }, 1000);
    window.addEventListener('resize',handleResize);
    return function(){
      clearInterval(timer);
      window.removeEventListener('resize',handleResize);
    }
  }, [count])

如果每次执行useEffect都定义一个定时器,那定时器会越来越多,通过在返回函数中清除定时器取消这个副作用。useEffect返回函数的执行时机是下一次useEffect执行之前。

利用这一点可以实现防抖和节流函数

获取数据

下面是在函数组件中获取数据最基本的方式:

import React, { useState, useEffect } from 'react';
import axios from 'axios';
function App() {
  const [data, setData] = useState({ hits: [] });
  useEffect(async () => {
    const result = await axios(
      'https://hn.algolia.com/api/v1/search?query=redux',
    );
    setData(result.data);
  });
  return (
    <ul>
      {data.hits.map(item => (
        <li key={item.objectID}>
          <a href={item.url}>{item.title}</a>
        </li>
      ))}
    </ul>
  );
}
export default App;

useEffect 的 hook 用于从 API 中获取从后端请求回来的数据,并使用 state hook 的更新函数在组件的本地状态中设置数据。prmomise 解析发生在异步/等待中。

但是,当你运行应用程序时,你会发现效果挂钩在组件装载时运行,但在组件更新时也会运行,这样它就会一次又一次地获取数据。这是一个错误,需要避免。我们只想在组件挂载时获取数据。这就是为什么你可以提供一个空数组作为 effect hook 的第二个参数,以避免在组件更新时激活它:

import React, { useState, useEffect } from 'react';
import axios from 'axios';
function App() {
  const [data, setData] = useState({ hits: [] });
  useEffect(async () => {
    const result = await axios(
      'https://hn.algolia.com/api/v1/search?query=redux',
    );
    setData(result.data);
  }, []);
  return (
    <ul>
      {data.hits.map(item => (
        <li key={item.objectID}>
          <a href={item.url}>{item.title}</a>
        </li>
      ))}
    </ul>
  );
}
export default App;

第二个参数可用于定义钩子所依赖的所有变量(在此数组中分配)。如果其中一个变量发生更改,则挂载将再次运行。如果包含变量的数组为空,则在更新组件时根本不会运行钩子,因为它不必监视任何变量。

还有最后一个问题。在代码中,我们使用 async/await 从第三方 API 获取数据。而我们知道 async函数返回一个 AsyncFunction 对象。但是,effect hook 应不返回任何内容或清理函数。这就是为什么不允许直接在 effect hook 中使用异步的原因。让我们通过调用effect 内的异步函数来实现它的解决方法:

import React, { useState, useEffect } from 'react';
import axios from 'axios';
function App() {
  const [data, setData] = useState({ hits: [] });
  useEffect(() => {
    const fetchData = async () => {
      const result = await axios(
        'https://hn.algolia.com/api/v1/search?query=redux',
      );
      setData(result.data);
    };
    fetchData();
  }, []);
  return (
    <ul>
      {data.hits.map(item => (
        <li key={item.objectID}>
          <a href={item.url}>{item.title}</a>
        </li>
      ))}
    </ul>
  );
}
export default App;

这就是使用 React 钩子获取数据。

到此这篇关于React Hooks获取数据实现方法介绍的文章就介绍到这了,更多相关React Hooks内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ReactHooks获取数据实现方法介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ReactHooks获取数据实现方法介绍

这篇文章主要介绍了reacthooks获取数据,文中给大家介绍了useStatedispatch函数如何与其使用的FunctionComponent进行绑定,实例代码给大家介绍的非常详细,需要的朋友可以参考下
2022-11-13

SpringMVC获取请求参数实现方法介绍

SpringMVC是Spring提供的一个基于MVC设计模式的轻量级Web开发框架,本质上相当于Servlet,SpringMVC角色划分清晰,分工明细,这篇文章主要介绍了SpringMVC实现获取请求参数方法
2022-11-13

C++异步数据交换实现方法介绍

这篇文章主要介绍了C++异步数据交换实现方法,异步数据交换,除了阻塞函数send()和recv()之外,Boost.MPI还支持与成员函数isend()和irecv()的异步数据交换
2022-11-21

Springboot与vue实现数据导出方法具体介绍

这篇文章主要介绍了Springboot与vue实现数据导出方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-02-09

win7 system权限怎么获取?win7管理员权限获取方法介绍

win7 system权限怎么获取?有时我们需要删除一些东西,需要system权限,但是SYSTEM是至高无上的超级管理员帐户,该如何获得呢?下文小编将告诉大家win7管理员权限获取方法,有需要的朋友可以过来了解一下。软件教程如下:新建一个
2023-06-06

php实现只获取数字的方法

这篇文章将为大家详细讲解有关php实现只获取数字的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php实现只获取数字的方法:1、使用正则表达式获取数字;2、使用“in_array”方法获取数字;3、使
2023-06-14

Java中获取键盘输入值的三种方法介绍

程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决
2023-05-30

Node连接mysql数据库方法介绍

使用Node做Web开发,基本上都是使用NoSQL数据库,最频繁的就是使用MongoDB了,自己做了一些简单的Web开发,为了降低学习门槛,一直使用MySQL来做数据库。这里简单介绍一下连接MySQL数据库的方式,希望能帮助到其他人。npm
2022-06-04

MongoD管理数据库的方法介绍

今天主要了解数据库管理,在操作之前先把MongoDB服务打开。一、显示数据库清单如果想查看数据库列表可以使用show dbs.二、切换数据库通过使用MongoDB中内置的句柄db来执行数据库操作。要对不同的数据库操作时,可以使用db.
2022-07-07

redis实现计数器-防止刷单方法介绍

最近由于双11要来临,公司需要在接口请求上,做一下并发限制的处理,或者做一个防止刷单的安全拦截: 比如:一个接口请求,限制每秒请求总数为200次,超过200次就等待,等下一秒,再次请求,这里用到一个redis作为一个计数器的模式来实现。 调
2022-06-04

编程热搜

目录