日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

usestate中的回调函数_React 中获取数据的 3 种方法:哪种最好?

發布時間:2025/3/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 usestate中的回调函数_React 中获取数据的 3 种方法:哪种最好? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

譯文 |?https://cloud.tencent.com/developer/article/1535913

原文 | https://dmitripavlutin.com/

在執行 I/O 操作(例如數據提取)時,要先發送網絡請求,然后等待響應,接著將響應數據保存到組件的狀態,最后進行渲染。

在 React 中生命周期方法HooksSuspense是獲取數據的方法。接下用事例演示一下如何使用它們并說明每種方法的優點和缺點,以便咱們更好的編寫異步操作代碼。

1.使用生命周期方法請求數據

應用程序Employees.org做兩件事:

1.一進入程序就獲取20名員工。2.可以通過過濾條件來篩選員工。

在實現這兩個需求之前,先來回顧一下React 類組件的2個生命周期方法:

  • componentDidMount():組件掛載后執行

  • componentDidUpdate(prevProps):當 props 或 state 改變時執行

  • 組件 使用上面兩個生命周期方法實現獲取邏輯:

    import EmployeesList from "./EmployeesList";import { fetchEmployees } from "./fake-fetch";class EmployeesPage extends Component { constructor(props) { super(props); this.state = { employees: [], isFetching: true }; } componentDidMount() { this.fetch(); } componentDidUpdate(prevProps) { if (prevProps.query !== this.props.query) { this.fetch(); } } async fetch() { this.setState({ isFetching: true }); const employees = await fetchEmployees(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()獲取員工數據:

    import EmployeesList from "./EmployeesList";import { fetchEmployees } from "./fake-fetch";function EmployeesPage({ query }) { const [isFetching, setFetching] = useState(false); const [employees, setEmployees] = useState([]); useEffect(function fetch() { (async function() { setFetching(true); setEmployees(await fetchEmployees(query)); setFetching(false); })(); }, [query]); if (isFetching) { return Fetching employees....; } return ;}

    打開codesandbox可以查看useEffect()如何獲取數據。

    可以看到使用 Hooks 的 比使用類組件方式簡單了很多。

    在函數組件中的useEffect(fetch, [query]),初始渲染之后執行fetch回調。此外,當依賴項 query 更新時也會重新執行 fetch 方法。

    但仍有優化的空間。Hooks 允許咱們從組件中提取雇員獲取邏輯,來看看:

    import React, { useState } from 'react';import EmployeesList from "./EmployeesList";import { fetchEmployees } from "./fake-fetch";function useEmployeesFetch(query) { // 這行有變化 const [isFetching, setFetching] = useState(false); const [employees, setEmployees] = useState([]); useEffect(function fetch { (async function() { setFetching(true); setEmployees(await fetchEmployees(query)); setFetching(false); })(); }, [query]); return [isFetching, employees];}function EmployeesPage({ query }) { const [employees, isFetching] = useEmployeesFetch(query); // 這行有變化 if (isFetching) { return Fetching employees....; } return ;}

    從useEmployeesFetch()提到所需要的值。組件沒有相應的獲取邏輯,只負責渲染界面工作。

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

    優點

    清楚和簡單

    Hooks沒有樣板代碼,因為它們是普通的函數。

    可重用性

    在 Hooks 中實現的獲取數據邏輯很容易重用。

    缺點

    需要前置知識

    Hooks 有點違反直覺,因此在使用之前必須理解它們,Hooks 依賴于閉包,所以一定要很好地了解它們。

    必要性

    使用Hooks,仍然必須使用命令式方法來執行數據獲取。

    3.使用 suspense 獲取數據

    Suspense 提供了一種聲明性方法來異步獲取React中的數據。

    注意:截至2019年11月,Suspense 處于試驗階段。

    包裝執行異步操作的組件:

    Fetch in progress...}>

    數據獲取時,Suspense將顯示fallback中的內容,當獲取完數據后,Suspense將使用獲取到數據渲染。

    來看看怎么使用Suspense:

    import React, { Suspense } from "react";import EmployeesList from "./EmployeesList";function EmployeesPage({ resource }) { return ( Fetching employees....}> );}function EmployeesFetch({ resource }) { const employees = resource.employees.read(); return ;}

    打開codesandbox可以查看Suspense如何獲取數據。

    使用Suspense處理組件將獲取到數據傳遞給組件。

    中的resource.employees是一個特殊包裝的promise,它在背后與Suspense進行通信。這樣,Suspense就知道“掛起” 的渲染要花多長時間,并且當資源準備就緒時,就開始執行渲染工作。

    最大的優點是:Suspense 以聲明性和同步的方式處理異步操作。組件沒有復雜數據獲取邏輯,而是以聲明方式使用資源來渲染內容。在組件內部沒有生命周期,沒有 Hooks,async/await,沒有回調:僅展示界面。

    優點

    聲明式

    Suspense 以聲明的方式在React中執行異步操作。

    簡單

    聲明性代碼使用起來很簡單,這些組件沒有復雜的數據獲取邏輯。

    松耦合與獲取實現

    使用Suspense的組件看不出如何獲取數據:使用 REST 或 GraphQL。Suspense設置一個邊界,保護獲取細節泄露到組件中。

    標準狀態

    如果請求了多個獲取操作,那么Suspense會使用最新的獲取請求。

    4.總結

    很長一段時間以來,生命周期方法一直是獲取數據方式的唯一解決方案。然而,使用它們獲取數據會有很多樣板代碼、重復和可重用性方面的問題。

    使用 Hooks 獲取數據是更好的選擇:更少的樣板代碼。

    Suspense的好處是聲明性獲取。咱們的組件不會被獲取實現細節弄得亂七八糟。Suspense更接近于React本身的聲明性本質。

    總結

    以上是生活随笔為你收集整理的usestate中的回调函数_React 中获取数据的 3 种方法:哪种最好?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美性天天 | 四虎成人精品在永久免费 | 男生捅女生肌肌 | 黄色小视频免费 | 九九看片 | 在线黄色网 | 日日骚一区二区 | 亚洲天堂一级片 | 欧美日韩在线中文字幕 | 亚洲精品乱码久久久久久国产主播 | 性xxxx视频 | 男女啪啪免费看 | 曰本毛片| 成人午夜视频一区二区播放 | 岛国精品资源网站 | 国产精品成av人在线视午夜片 | 欧美日韩黄色一级片 | 白丝美女被草 | 亚洲射| 都市激情第一页 | 蜜桃视频无码区在线观看 | 色婷婷国产精品综合在线观看 | 亚洲成a人在线观看 | 落日余晖| 亚洲国产日韩在线 | 日本一区二区视频在线播放 | 色婷婷av一区二区三区之红樱桃 | 五月婷婷网 | 国产淫片av片久久久久久 | 久久精品国产亚洲7777 | 亚洲图片欧美色图 | 国产偷国产偷av亚洲清高 | 国产在线色视频 | 夜夜精品视频 | 亚洲av鲁丝一区二区三区 | a级片免费看| 欧美国产视频 | 激情午夜视频 | 亚洲久久色 | 在线看片网址 | 97伊人网 | 黄色小视频在线免费看 | 美女被捅个不停 | 德国艳星videos极品hd | 麻豆亚洲 | 色综合亚洲 | 精品久久久蜜桃 | 三级福利视频 | 亚洲人精品午夜射精日韩 | 在线看黄网| 一区二区三区福利视频 | 最近更新中文字幕 | 欧美插插视频 | av55 | 免费高清av在线看 | 日韩aaaaa| 女人高潮被爽到呻吟在线观看 | 国产亚洲视频在线观看 | 国产亚洲性欧美日韩在线观看软件 | 国产视频一区在线播放 | zzjj国产精品一区二区 | 日韩成人av在线播放 | 久久午夜精品视频 | 在线亚洲+欧美+日本专区 | av一区不卡 | 在线亚洲区| 国产精品久久麻豆 | 久久综合加勒比 | gai视频在线观看资源 | 国产良妇出轨视频在线观看 | 欧美激情欧美激情在线五月 | 天天色天天射综合网 | 久草欧美| 色婷婷av国产精品 | 成人网入口| 天天操天天干天天爱 | 丰满秘书被猛烈进入高清播放在 | 黄色1级视频| 另类综合视频 | 亚洲成人中文字幕 | 久久久精品麻豆 | 日韩在线观看不卡 | 一级做a爱片久久毛片 | 欧美日韩精品在线观看视频 | 免费毛片网站在线观看 | 欧美日韩少妇精品 | 色94色欧美 | 天天宗合网 | 亚洲一区二区人妻 | 91综合久久 | 久久超| 日韩精品在线网站 | 国产探花精品在线 | 午夜精品久久久久久久99老熟妇 | 3p视频在线观看 | 在哪里可以看黄色片 | 国产免费自拍 | 视频二区在线观看 | 拔萝卜91| 91美女片黄在线观看游戏 |