了解反应中获取数据的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!
反应中获取数据的方法:1、使用生命周期方法请求数据;2、使用钩子获取数据;3、使用悬念获取数据。
引用><强>反应中获取数据的方法:强>
<强> 1。使用生命周期方法请求数据强>
应用程序Employees.org做两件事:
1。一进入程序就获取20名员工。
2。可以通过过滤条件来筛选员工。
在实现这两个需求之前,先来回顾一下反应类组件的2个生命周期方法:
<李>
<代码> componentDidMount() 代码>:组件挂载后执行
李> <李><代码> componentDidUpdate (prevProps)> 代码:当道具或状态改变时执行
李>组件& lt; EmployeesPage>使用上面两个生命周期方法实现获取逻辑:
从“进口EmployeesList。/EmployeesList"; 从“进口{fetchEmployees}/fake-fetch"; 类EmployeesPage扩展组件{ 构造函数(道具){ 超级(道具); 这一点。状态={员工:[],isFetching:真正的}; } componentDidMount () { this.fetch (); } componentDidUpdate (prevProps) { 如果(prevProps。查询!==this.props.query) { this.fetch (); } } 异步获取(){ 这一点。设置状态({isFetching:真}); const员工=等待fetchEmployees (this.props.query); 这一点。设置状态({员工isFetching:假}); } 呈现(){ const {isFetching,员工}=this.state; 如果(isFetching) { 返回& lt; div>获取员工数据中……& lt;/div>; } 返回& lt; EmployeesList员工={员工}/祝辞;; } }打开codesandbox可以查看<代码> & lt; EmployeesPage> 代码>获取过程。
<代码> & lt; EmployeesPage> 代码有一个获取数据的异步方法fetch()。在获取请求完成后,使用设置状态方法来更新员工。
<代码> this.fetch() 代码>在<代码> componentDidMount() 代码>生命周期方法中执行:它在组件初始渲染时获取员工数据。
当咱们关键字进行过滤时,将更新道具。查询。每当道具。查询更新componentDidUpdate()就会重新执行this.fetch ()。
虽然生命周期方法相对容易掌握,但是基于类的方法存在样板代码使重用性变得困难。
<>强优点强>
这种方法很容易理解:<代码> componentDidMount() 代码>在第一次渲染时获取数据,而<代码> componentDidUpdate() 代码>在道具更新时重新获取数据。
<强>缺点强>
样板代码
基于类的组件需要继承反应。组件,在构造函数中执行<代码>超级(道具)代码>等等。
:使用这个关键字很麻烦。
代码重复
<代码> componentDidMount() 代码>和<代码> componentDidUpdate() 代码>中的代码大部分是重复的。
很难重用
员工获取逻辑很难在另一个组件中重用。
<强> 2。使用钩子获取数据强>
钩子是基于类获取数据方式更好的选择。作为简单的函数,钩子不像类组件那样还要继承,并且也更容易重用。
简单回忆一下<代码> useEffect(回调(deps])钩> 代码。这个钩在挂载后执行调,并且当依赖项deps发生变化时重新渲染。
如下示例所示,在& lt; EmployeesPage>中使用useEffect()获取员工数据:
从“进口EmployeesList。/EmployeesList"; 从“进口{fetchEmployees}/fake-fetch"; 查询函数EmployeesPage ({}) { const [isFetching setFetching]=useState(假); const[员工,setEmployees]=useState ([]); useEffect (fetch()函数{ (异步函数(){ setFetching(真正的); setEmployees(等待fetchEmployees(查询)); setFetching(假); }) (); },[查询]); 如果(isFetching) { 返回& lt; div>获取员工.... & lt;/div>; } 返回& lt; EmployeesList员工={员工}/祝辞;; }打开<代码> codesandbox> 代码可以查看useEffect()如何获取数据。
可以看到使用钩子的& lt; EmployeesPage>比使用类组件方式简单了很多。
在& lt; EmployeesPage>函数组件中的<代码> useEffect(取回,[查询])> 代码,初始渲染之后执行拿回调。此外,当依赖项查询更新时也会重新执行获取方法。
但仍有优化的空间.Hooks允许咱们从& lt; EmployeesPage>组件中提取雇员获取逻辑,来看看:
进口反应,{useState} & # 39;反应# 39;; 从“进口EmployeesList。/EmployeesList"; 从“进口{fetchEmployees}/fake-fetch"; 函数useEmployeesFetch(查询){//这行有变化 const [isFetching setFetching]=useState(假); const[员工,setEmployees]=useState ([]); useEffect(函数获取{ (异步函数(){ setFetching(真正的); setEmployees(等待fetchEmployees(查询)); setFetching(假); }) (); },[查询]); 返回(isFetching、员工); } 查询函数EmployeesPage ({}) { const[员工,isFetching]=useEmployeesFetch(查询);//这行有变化 如果(isFetching) { 返回& lt; div>获取员工.... & lt;/div>; } 返回& lt; EmployeesList员工={员工}/祝辞;; }反应中获取数据的方法