首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau
百百 BLOG
首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau

Kurau Blog

「隨心而寫,真真假假,都是我」

一個記錄生活、輸出興趣的個人空間。
遊戲、影視、閱讀、學習……每一段體驗都值得留下文字。

頁面導覽

  • 學習紀錄
  • 遊戲心得
  • 影視Life
  • 書單
  • 委託作品與二創
  • Kurau
  • 合作邀請

找到我

歡迎來 Discord 找我聊天!

“曾經發生的事不可能忘記,只是暫時想不起來而已。”-《神隱少女》

© 2026 Kurau All rights reserved

面試考題

diff演算法 與 React的key值

By Kurau·Updated 2026-05-09·3 分鐘閱讀

15張圖,20分鐘吃透Diff演算法核心原理,我說的!!! - 掘金
前言 大家好,我是林三心,在日常面試中,Diff演算法都是繞不過去的一道坎,用最通俗的話,講最難的知識點一直是我寫文章的宗旨,今天我就用通俗的方式來講解一下Diff演算法吧?Lets Go 什麼是虛擬DO https://juejin.cn/post/6994959998283907102

什麼是 Diff 演算法?

Diff 演算法用於比較兩棵虛擬 DOM 樹的差異,只更新需要改變的部分,而非重新渲染整棵樹。

React 的 Diff 策略(三個假設)

  1. 同層比較:只比較同一層級的節點,不跨層級比較(O(n) 複雜度)
  2. 類型不同直接替換:若元素類型不同(如 <div> 變 <span>),直接銷毀舊節點並建立新節點
  3. Key 值輔助識別:透過 key 來判斷哪些元素是相同的,只是位置改變

Key 值的重要性

// ❌ 用 index 當 key(列表有增刪時會出問題)
{items.map((item, index) => <li key={index}>{item}</li>)}

// ✅ 用唯一且穩定的 id 當 key
{items.map((item) => <li key={item.id}>{item.name}</li>)}
jsx

為什麼不該用 index 當 key?

當列表發生插入或刪除時,index 會改變,導致 React 錯誤地認為元素發生了變化,可能造成:

  • 不必要的重新渲染
  • 元件狀態錯亂(如輸入框的值跑到其他列)
  • 動畫異常

目錄

    ◆ 相關文章

    • React Redux 用過嗎

      2026-05-31
    • 解釋一下 React的各種Hook

      2026-05-31
    • Function Component 介紹

      2026-05-09
    • React 用過嗎

      2026-05-09
    ← 上一篇Class Components 介紹下一篇 →Dynamic Programming

    ◆ 關於作者

    Kurau

    個人寫作 / 創作的 SoT,記錄遊戲、影視、學習與生活。

    更多 Kurau 的文章