React ialah perpustakaan JavaScript yang berkuasa dan serba boleh digunakan untuk membina antara muka pengguna. Salah satu ciri modennya, Suspense, membolehkan komponen mengendalikan data tak segerak dengan anggun. Walau bagaimanapun, konsep "Kelakuan Melempar Janji Warisan" dalam React sering menimbulkan kekeliruan dalam kalangan pembangun. Catatan blog ini bertujuan untuk memecahkan perkara yang berkaitan dengan tingkah laku ini, cara ia sesuai dengan proses pemaparan React dan sebab penting untuk memahami apabila menggunakan ciri serentak.
Gelagat Melempar Janji Warisan merujuk kepada mekanisme di mana komponen React "membuang" janji semasa pemaparan. Ini memberitahu React bahawa komponen sedang menunggu beberapa data tak segerak untuk diselesaikan sebelum ia boleh dipaparkan sepenuhnya.
Apabila janji dilemparkan, React menjeda pemaparan bahagian pepohon komponen itu dan sebaliknya memaparkan UI sandaran, jika ditakrifkan, menggunakan Suspense. Setelah janji diselesaikan, React memaparkan semula komponen dengan data yang diselesaikan.
Mari kita lihat langkah demi langkah bagaimana tingkah laku ini berfungsi:
import React, { Suspense } from 'react'; // Simulated fetch function function fetchData() { return new Promise((resolve) => { setTimeout(() => resolve("Data loaded!"), 2000); }); } // Component that throws a promise function AsyncComponent() { const data = useData(); // Custom hook return <div>{data}</div>; } function useData() { const promise = fetchData(); if (!promise._result) { throw promise; } return promise._result; } function App() { return ( <Suspense fallback={<div>Loading...</div>}> <AsyncComponent /> </Suspense> ); } export default App;
Penjelasan:
React 18 memperkenalkan pemaparan serentak, yang memperhalusi cara melontar janji berfungsi. Penambahbaikan utama termasuk:
Walaupun Legacy Promise Throwing adalah asas kepada Suspense, pembangun harus menggunakan perpustakaan dan corak moden untuk pengalaman yang lebih baik:
Perpustakaan seperti React Query dan SWR menyediakan penyelesaian yang mantap untuk pengambilan data, caching dan penyegerakan, menghapuskan keperluan untuk membuang janji secara manual.
React 18 memperkenalkan cangkuk guna (percubaan) untuk mengendalikan janji dengan cara yang lebih bersih dan deklaratif.
import React, { Suspense } from 'react'; // Simulated fetch function function fetchData() { return new Promise((resolve) => { setTimeout(() => resolve("Data loaded!"), 2000); }); } // Component that throws a promise function AsyncComponent() { const data = useData(); // Custom hook return <div>{data}</div>; } function useData() { const promise = fetchData(); if (!promise._result) { throw promise; } return promise._result; } function App() { return ( <Suspense fallback={<div>Loading...</div>}> <AsyncComponent /> </Suspense> ); } export default App;
Melempar janji secara manual boleh membawa kepada isu yang tidak dijangka, terutamanya dalam persekitaran yang tidak serentak. Sebaliknya, bergantung pada perpustakaan atau utiliti yang mengasingkan kerumitan ini.
Merangkumi logik Suspense dalam komponen boleh guna semula untuk kod yang lebih bersih:
function AsyncComponent() { const data = use(fetchData()); return <div>{data}</div>; }
Kelakuan Melontar Janji Warisan ialah asas kepada ciri Suspense React, yang membolehkan pengendalian data tak segerak yang lancar semasa pemaparan. Walau bagaimanapun, apabila React berkembang, begitu juga alat dan corak untuk mengurus operasi async. Dengan memahami tingkah laku ini dan memanfaatkan amalan moden, pembangun boleh mencipta aplikasi yang cekap, responsif dan boleh diselenggara.
Atas ialah kandungan terperinci Memahami Gelagat Melempar Janji Legasi dalam Reaksi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!