react中取得資料的方法:1、使用生命週期方法請求資料;2、使用Hooks取得資料;3、使用suspense取得資料。
本教學操作環境:windows10系統、react16,本文適用於所有品牌的電腦。
react中取得資料的方法:
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 <div>获取员工数据中...</div>; } return <EmployeesList employees={employees} />; } }
開啟codesandbox可以查看<employeespage></employeespage>
取得流程。
<employeespage></employeespage>
有一個取得資料的非同步方法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發生變化時重新渲染。
如下範例所示,在
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 <div>Fetching employees....</div>; } return <EmployeesList employees={employees} />; }
開啟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 <div>Fetching employees....</div>; } return <EmployeesList employees={employees} />; }
從useEmployeesFetch()
提到所需的值。元件
更好的是,可以在需要取得僱員的任何其他元件中重複使用useEmployeesFetch()。
優點
清楚簡單,Hooks沒有樣板程式碼,因為它們是普通的函數。
可重複使用性,在 Hooks 中實作的取得資料邏輯很容易重複使用。
缺點
需要前置知識
Hooks 有點違反直覺,因此在使用之前必須理解它們,Hooks 依賴於閉包,所以一定要好好了解它們。
必要性
使用Hooks,仍然必須使用命令式方法來執行資料擷取。
佛山vi設計https://www.houdianzi.com/fsvi/ 豌豆資源搜尋大全https://55wd.com
3.使用suspense 取得資料
Suspense 提供了一種聲明性方法來非同步取得React中的資料。
注意:截至2019年11月,Suspense 處於試驗階段。
<suspense></suspense>
包裝執行非同步操作的元件:
<Suspense fallback={<span>Fetch in progress...</span>}> <FetchSomething /> </Suspense>
資料取得時,Suspense會顯示fallback中的內容,當取得完資料後,Suspense將使用取得到資料渲染<fetchsomething></fetchsomething>
。
來看看怎麼使用Suspense:
import React, { Suspense } from "react"; import EmployeesList from "./EmployeesList"; function EmployeesPage({ resource }) { return ( <Suspense fallback={<h1 id="Fetching-nbsp-employees">Fetching employees....</h1>}> <EmployeesFetch resource={resource} /> </Suspense> ); } function EmployeesFetch({ resource }) { const employees = resource.employees.read(); return <EmployeesList employees={employees} />; }
開啟codesandbox可以查看Suspense如何取得資料。
<employeespage></employeespage>
使用Suspense處理元件將取得到資料傳遞給<employeesfetch></employeesfetch>
元件。
resource.employees
是一個特殊包裝的promise,它在背後與Suspense進行通訊。這樣,Suspense就知道「掛起」
最大的優點是:Suspense 以宣告性和同步的方式處理非同步操作。元件沒有複雜資料取得邏輯,而是以聲明方式使用資源來渲染內容。在組件內部沒有生命週期,沒有 Hooks,async/await,沒有回調:僅展示介面。
優點
聲明式
Suspense 以宣告的方式在React中執行非同步操作。
簡單
聲明性程式碼使用起來很簡單,這些元件沒有複雜的資料取得邏輯。
鬆散耦合與取得實作
使用Suspense的元件看不出如何取得資料:使用 REST 或 GraphQL。 Suspense設置一個邊界,保護獲取細節洩漏到組件中。
標準狀態
如果要求了多個取得操作,那麼Suspense會使用最新的取得請求。
4.總結
很長一段時間以來,生命週期方法一直是獲取資料方式的唯一解決方案。然而,使用它們來獲取資料會有很多樣板程式碼、重複和可重用性方面的問題。
#相關免費學習推薦:JavaScript(影片)
以上是react中怎麼取得數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何對多個鏈接進行並發GET請求並依次判斷返回結果?在Tampermonkey腳本中,我們經常需要對多個鏈...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

禪工作室 13.0.1
強大的PHP整合開發環境

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境