千家信息网

React中怎么获取数据

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,本篇内容介绍了"React中怎么获取数据"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在执行I/O操
千家信息网最后更新 2024年11月26日React中怎么获取数据

本篇内容介绍了"React中怎么获取数据"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  在执行I/O操作(例如数据提取)时,要先发送网络请求,然后等待响应,接着将响应数据保存到组件的状态,最后进行渲染。

  在React中生命周期方法、Hooks和Suspense是获取数据的方法。接下用事例演示一下如何使用它们并说明每种方法的优点和缺点,以便咱们更好的编写异步操作代码。

  1.使用生命周期方法请求数据

  应用程序Employees.org做两件事:

  1.一进入程序就获取20名员工。

  2.可以通过过滤条件来筛选员工。

  1.gif

  在实现这两个需求之前,先来回顾一下React类组件的2个生命周期方法:

  componentDidMount():组件挂载后执行

  componentDidUpdate(prevProps):当props或state改变时执行

  组件使用上面两个生命周期方法实现获取逻辑:

  importEmployeesListfrom"./EmployeesList";

  import{fetchEmployees}from"./fake-fetch";

  classEmployeesPageextendsComponent{

  constructor(props){

  super(props);

  this.state={employees:[],isFetching:true};

  }

  componentDidMount(){

  this.fetch();

  }

  componentDidUpdate(prevProps){

  if(prevProps.query!==this.props.query){

  this.fetch();

  }

  }

  asyncfetch(){

  this.setState({isFetching:true});

  constemployees=awaitfetchEmployees(this.props.query);

  this.setState({employees,isFetching:false});

  }

  render(){

  const{isFetching,employees}=this.state;

  if(isFetching){

  return

获取员工数据中...
;

  }

  return;

  }

  }

  打开codesandbox可以查看获取过程。

  有一个获取数据的异步方法fetch()。在获取请求完成后,使用setState方法来更新employees。

  this.fetch()在componentDidMount()生命周期方法中执行:它在组件初始渲染时获取员工数据。

  当咱们关键字进行过滤时,将更新props.query。每当props.query更新,componentDidUpdate()就会重新执行this.fetch()。

  虽然生命周期方法相对容易掌握,但是基于类的方法存在样板代码使重用性变得困难。

  优点

  这种方法很容易理解:componentDidMount()在第一次渲染时获取数据,而componentDidUpdate()在props更新时重新获取数据。

  缺点

  样板代码

  基于类的组件需要继承React.Component,在构造函数中执行super(props)等等。

  this

  使用this关键字很麻烦。

  代码重复

  componentDidMount()和componentDidUpdate()中的代码大部分是重复的。

  很难重用

  员工获取逻辑很难在另一个组件中重用。

  2.使用Hooks获取数据

  Hooks是基于类获取数据方式更好的选择。作为简单的函数,Hooks不像类组件那样还要继承,并且也更容易重用。

  简单回忆一下useEffect(callback[,deps])Hook。这个hook在挂载后执行callback,并且当依赖项deps发生变化时重新渲染。

  如下示例所示,在中使用useEffect()获取员工数据:

  importEmployeesListfrom"./EmployeesList";

  import{fetchEmployees}from"./fake-fetch";

  functionEmployeesPage({query}){

  const[isFetching,setFetching]=useState(false);

  const[employees,setEmployees]=useState([]);

  useEffect(functionfetch(){

  (asyncfunction(){

  setFetching(true);

  setEmployees(awaitfetchEmployees(query));

  setFetching(false);

  })();

  },[query]);

  if(isFetching){

  return

Fetchingemployees....
;

  }

  return;

  }

  打开codesandbox可以查看useEffect()如何获取数据。

  可以看到使用Hooks的比使用类组件方式简单了很多。

  在函数组件中的useEffect(fetch,[query]),初始渲染之后执行fetch回调。此外,当依赖项query更新时也会重新执行fetch方法

  。

  但仍有优化的空间。Hooks允许咱们从组件中提取雇员获取逻辑,来看看:

  importReact,{useState}from'react';

  importEmployeesListfrom"./EmployeesList";

  import{fetchEmployees}from"./fake-fetch";

  functionuseEmployeesFetch(query){//这行有变化

  const[isFetching,setFetching]=useState(false);

  const[employees,setEmployees]=useState([]);

  useEffect(functionfetch{

  (asyncfunction(){

  setFetching(true);

  setEmployees(awaitfetchEmployees(query));

  setFetching(false);

  })();

  },[query]);

  return[isFetching,employees];

  }

  functionEmployeesPage({query}){

  const[employees,isFetching]=useEmployeesFetch(query);//这行有变化

  if(isFetching){

  return

Fetchingemployees....
;

  }

  return;

  }

  从useEmployeesFetch()提到所需要的值。组件没有相应的获取逻辑,只负责渲染界面工作。

  更好的是,可以在需要获取雇员的任何其他组件中重用useEmployeesFetch()。

  优点

  清楚和简单

  Hooks没有样板代码,因为它们是普通的函数。

  可重用性

  在Hooks中实现的获取数据逻辑很容易重用。

  缺点

  需要前置知识

  Hooks有点违反直觉,因此在使用之前必须理解它们,Hooks依赖于闭包,所以一定要很好地了解它们。

  必要性

  使用Hooks,仍然必须使用命令式方法来执行数据获取。

  3.使用suspense获取数据

  Suspense提供了一种声明性方法来异步获取React中的数据。

  注意:截至2019年11月,Suspense处于试验阶段。

  包装执行异步操作的组件:

  Fetchinprogress...}>

  

  

  数据获取时,Suspense将显示fallback中的内容,当获取完数据后,Suspense将使用获取到数据渲染

  来看看怎么使用Suspense:

  importReact,{Suspense}from"react";

  importEmployeesListfrom"./EmployeesList";

  functionEmployeesPage({resource}){

  return(

  Fetchingemployees....}>

  

  

  );

  }

  functionEmployeesFetch({resource}){

  constemployees=resource.employees.read();

  return;

  }

  打开codesandbox可以查看Suspense如何获取数据。

  使用Suspense处理组件将获取到数据传递给组件。

  中的resource.employees是一个特殊包装的promise,它在背后与Suspense进行通信。这样,Suspense就知道"挂起"的渲染要花多长时间,并且当资源准备就绪时,就开始执行渲染工作。

  最大的优点是:Suspense以声明性和同步的方式处理异步操作。组件没有复杂数据获取逻辑,而是以声明方式使用资源来渲染内容。在组件内部没有生命周期,没有Hooks,async/await,没有回调:仅展示界面。

  优点

  声明式

  Suspense以声明的方式在React中执行异步操作。

  简单

  声明性代码使用起来很简单,这些组件没有复杂的数据获取逻辑。

  松耦合与获取实现

  使用Suspense的组件看不出如何获取数据:使用REST或GraphQL。Suspense设置一个边界,保护获取细节泄露到组件中。

  标准状态

  如果请求了多个获取操作,那么Suspense会使用最新的获取请求。

"React中怎么获取数据"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

数据 组件 方法 代码 周期 生命 逻辑 员工 优点 方式 更新 内容 函数 样板 知识 缺点 变化 复杂 两个 关键 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全法处罚 医院 hbase分布式数据库论文 现在去开软件开发公司玩吗 广播电视网络技术趋势 网络安全的书包括arp 2018年软件开发工具真题 中国恐怖主义数据库 服务器是被运营商管理吗 湖南客户管理软件开发平台 综合服务器哪个好 我的世界服务器推广 王牌竞速内测服务器 南昌职业大学计算机网络技术 昌平区发展软件开发规定 想学信息网络技术该报什么科 通过网络技术可以炸别人家吗 武汉一五八网络技术有限公司 哈尔滨商业大学网络技术中心 民航网络安全研究现状 天津华为服务器维修调试多少钱 sql备份数据库怎么还原 为啥服务器进不了uefi模式 公司邮箱提示无法写入数据库 中国恐怖主义数据库 ig 数据库 服务器和电脑开机界面怎么不一样 数据库权限表的设计方案 西青区企业网络技术诚信合作 北京查查看网络技术 无线传感器网络技术原理答案
0