ไม่จำเป็นต้องใช้ useEffect เพื่อดึงข้อมูลใน React
Dec 07 2022
สวัสดี ในบล็อกนี้ เราจะพยายามกำจัด useEffect ในการเรนเดอร์เริ่มต้นด้วยความช่วยเหลือของ react-router เราเตอร์ React v6 ออกมาพร้อมกับตะขอใหม่ๆ ที่จะช่วยให้กระบวนการโหลดข้อมูลและการส่งแบบฟอร์มง่ายขึ้น
สวัสดี ในบล็อกนี้ เราจะพยายามกำจัดuseEffectการแสดงผลเริ่มต้นด้วยความช่วยเหลือreact-routerของ เราเตอร์ React v6 ออกมาพร้อมกับตะขอใหม่ๆ ที่จะช่วยให้กระบวนการโหลดข้อมูลและการส่งแบบฟอร์มง่ายขึ้น ขอบคุณทีมงานรีมิกซ์
ดังที่ทีม React กล่าวถึง: UseEffect synchronisationไม่ได้มีไว้สำหรับlifecycle methods.
ในแอปตอบโต้ของเรา เรามักจะเรียก API useEffectตามตัวอย่างด้านล่าง แต่ใน React 18 useEffect นี้ถูกเรียกสองครั้งและนักพัฒนาบางคนคิดว่านี่เป็นข้อผิดพลาดในการตอบสนองเนื่องจากสิ่งนี้เกิดขึ้นเฉพาะในโหมดการพัฒนา เชื่อฉันเถอะว่านี่ไม่ใช่ข้อผิดพลาด
import React, { useState, useEffect } from 'react';
const Homepage = () => {
const [data, setData] = useState(null);
useEffect(() => {
// Fetch the data from the API
fetch('https://example.com/api/data')
.then((response) => response.json())
.then((json) => setData(json));
}, []);
// Return a loading message while the data is being fetched
if (data === null) {
return <p>Loading...</p>;
}
// Render the data when it is available
return <pre>{JSON.stringify(data, null, 2)}</pre>;
};
export default Homepage;
import { createBrowserRouter, defer } from "react-router-dom";
const router = createBrowserRouter([
{
path: "/",
element: <Homepage/>,
loader: async ({ request, params }) => {
const data = fetch('https://example.com/api/data')
return defer({
results: data,
})
},
},
]);
import React from 'react';
import { useLoaderData } from "react-router-dom";
const Homepage = () => {
const data = useLoaderData()
// Render the data when it is available
return <pre>{JSON.stringify(data, null, 2)}</pre>;
};
export default Homepage;
import React from 'react';
import { useLoaderData, Await } from "react-router-dom";
const Homepage = () => {
const data = useLoaderData()
// Render the data when it is available
return <React.Suspense
fallback={<p>Loading data...</p>}
>
<Await
resolve={data.result}
errorElement={
<p>Error loading data</p>
}
>
{(result) => (
<pre>{JSON.stringify(results, null, 2)}</pre>
)}
</Await>
</React.Suspense>
};
export default Homepage;





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)