vocus logo

方格子 vocus

我們不該過度使用 useEffect

更新 發佈閱讀 3 分鐘

此文是我作為 React 工程師 (Junior) 的學習記錄(更新至 2026/03/12),歡迎各位大大指正。


上週面試時,遇到一個有趣的考題。面試官給了這段程式碼,請我找出這段程式碼有什麼問題。

function Form() {
const [firstName, setFirstName] = useState('Taylor');
const [lastName, setLastName] = useState('Swift');
const [fullName, setFullName] = useState('');

useEffect(() => {
setFullName(firstName + ' ' + lastName);
}, [firstName, lastName]);

// ...其他程式碼
}

(此段程式碼來源於React官網)

老實說,第一眼看上去只覺得程式看起來可以執行,邏輯上也沒問題呀?但其實,這是一種反模式(Anti-pattern)

這段程式碼主要存在著兩個問題:

    • 因為 React 渲染機制的關係,當我們修改 firstName 時,舊組件會先以舊的 fullName 渲染一次,再透過 useEffect 進行 state 更新,渲染成新的 fullName 。
    • 在後續的程式維護,我們被迫多維護 useEffect 的依賴,假設後續邏輯有變,可能會不小心忘記維護。


在 React 官方文件 You Might Not Need an Effect 中建議:如果某個值可以從現有的 props 或 state 計算出來,就不應該將其放入 state。


我們應該直接在渲染期間計算:

function Form() {
const [firstName, setFirstName] = useState('Taylor');
const [lastName, setLastName] = useState('Swift');

// 直接在渲染期間計算
const fullName = firstName + ' ' + lastName;

// ...其他程式碼
}

(此段程式碼來源於React官網)


useEffect 應該用於「處理副作用」,例如:操作 DOM、訂閱事件、或是呼叫 API 等與外部系統同步的行為。

如果是為了根據 A 狀態去更新 B 狀態,能直接推導出來的話,就讓它保持簡單吧!


留言
avatar-img
Ted 前端共享空間
0會員
1內容數
React 技術分享 | 前端職場心得 | 工程師成長筆記
你可能也想看
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
vocus 最具指標性的創作者社群──「野格團」, 2026 年春季,這支充滿專業、熱情的團隊再次擴編,迎來了 8 位實力堅強的「個人主題專家」新成員 💫💫💫 從投資理財、自我成長、閱讀書評到電影戲劇,他們各自帶著獨特的「創作超能力」準備在格友大廳與大家見面。
Thumbnail
vocus 最具指標性的創作者社群──「野格團」, 2026 年春季,這支充滿專業、熱情的團隊再次擴編,迎來了 8 位實力堅強的「個人主題專家」新成員 💫💫💫 從投資理財、自我成長、閱讀書評到電影戲劇,他們各自帶著獨特的「創作超能力」準備在格友大廳與大家見面。
Thumbnail
本文針對面試邀約後的準備工作及臨場寒暄提供了一些實用建議,幫助求職者在面試的第一印象中脫穎而出。從回信確認面試資訊到保持適當的到達時間,以及如何利用寒暄時間增進雙方互動,我們提供了多方面的提醒。希望這些細節能幫助應徵者在面試過程中,抓住更多機會,贏得面試官的青睞。
Thumbnail
本文針對面試邀約後的準備工作及臨場寒暄提供了一些實用建議,幫助求職者在面試的第一印象中脫穎而出。從回信確認面試資訊到保持適當的到達時間,以及如何利用寒暄時間增進雙方互動,我們提供了多方面的提醒。希望這些細節能幫助應徵者在面試過程中,抓住更多機會,贏得面試官的青睞。
Thumbnail
近期遇到好幾位應徵者,當詢問為何離開前一份工作或是為何尋找外部新工作時,都欲言又止地提到和主管的相處有一些挑戰。若你也有相同的情形,離職原因和主管有關,可以如何回應比較恰當呢?在面試中坦然地談及挑戰、採取的積極性行動以及自身的正面學習,都可以有效回答這樣的問題。
Thumbnail
近期遇到好幾位應徵者,當詢問為何離開前一份工作或是為何尋找外部新工作時,都欲言又止地提到和主管的相處有一些挑戰。若你也有相同的情形,離職原因和主管有關,可以如何回應比較恰當呢?在面試中坦然地談及挑戰、採取的積極性行動以及自身的正面學習,都可以有效回答這樣的問題。
Thumbnail
時常有應徵者在苦惱,面試時面試官的最後一題「請問你有什麼想問的?」要怎麼回答?要如何在這一題中,讓面試官留下好印象,展現自己積極進取的態度?這篇文章,就來誠實的分享身為人資的我對這個議題的看法,並提供一些建議給大家參考。
Thumbnail
時常有應徵者在苦惱,面試時面試官的最後一題「請問你有什麼想問的?」要怎麼回答?要如何在這一題中,讓面試官留下好印象,展現自己積極進取的態度?這篇文章,就來誠實的分享身為人資的我對這個議題的看法,並提供一些建議給大家參考。
Thumbnail
領取來自塔羅占卜的訊息:這次的面試會有好的結果嗎?(無時間限制) ※靜下心來憑直覺從1.2.3.4中,選出一個數字※ 如果有不只一個面試機會,也可以選擇不同選項來接收不同訊息 (運勢提醒僅供參考,希望能幫助大家用來趨吉避凶,命運掌握在自己手中!) ************* ************
Thumbnail
領取來自塔羅占卜的訊息:這次的面試會有好的結果嗎?(無時間限制) ※靜下心來憑直覺從1.2.3.4中,選出一個數字※ 如果有不只一個面試機會,也可以選擇不同選項來接收不同訊息 (運勢提醒僅供參考,希望能幫助大家用來趨吉避凶,命運掌握在自己手中!) ************* ************
Thumbnail
雖然我們都往往希望每一次面試之後就可以拿到offer,但結果有時候無法盡如人意,因此我們就應該將每一次面試都當成一次經驗的學習,因此我簡單列舉幾項面試之後可以注意的事項,讓我們的下一次面試永遠是最後一次面試囉!
Thumbnail
雖然我們都往往希望每一次面試之後就可以拿到offer,但結果有時候無法盡如人意,因此我們就應該將每一次面試都當成一次經驗的學習,因此我簡單列舉幾項面試之後可以注意的事項,讓我們的下一次面試永遠是最後一次面試囉!
Thumbnail
曾經我是個面試官,面試過程通常只是個確認動作而已。因為以求職者的立場來說,寄出履歷的當下,已經將自己最好的一面用文字表達,有的在附上照片,求才方即可依照片面的履歷介紹下認識此求職者了。 求職者參與面試的準備,就相當於面試技巧喽!我以曾經擔任面試官的角度來說明,面試技巧: 履歷表,必須更新,最好
Thumbnail
曾經我是個面試官,面試過程通常只是個確認動作而已。因為以求職者的立場來說,寄出履歷的當下,已經將自己最好的一面用文字表達,有的在附上照片,求才方即可依照片面的履歷介紹下認識此求職者了。 求職者參與面試的準備,就相當於面試技巧喽!我以曾經擔任面試官的角度來說明,面試技巧: 履歷表,必須更新,最好
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News