一個解決 React 錯誤的快速指南

在開發 React / Next.js 應用程式時,我遭遇了以下錯誤:

無法在渲染不同元件時更新元件 (Cannot update a component ('App') while rendering a different component)

我進行了相關研究,但所找到的資料中有很多混淆的內容。

以下是我的處理方式:我在 App 元件中管理一個集中式狀態:

function MyApp({ Component, pageProps }) {
 const [lessonsRead, setLessonsRead] = useState()

 return (
 <Component
 lessonsRead={lessonsRead}
 setLessonsRead={setLessonsRead}
 {...pageProps}
 />
 )
}

在 Next.js 的頁面元件中,我呼叫 setLessonsRead 方法,以 SWR(fetch)呼叫的結果為基準,將資料填充到這個狀態中:

if (courseData && courseData.lessonsRead) {
 setLessonsRead(courseData.lessonsRead)
}

我將這段程式碼直接放在元件中。

為了解決這個問題,我必須使用 useEffect 將這段程式碼包裹起來,只在資料變動時執行,而不是在每次元件屬性更新時都執行:

useEffect(() => {
 if (courseData && courseData.lessonsRead) {
 setLessonsRead(courseData.lessonsRead)
 }
}, [courseData])