*前情提要:通常在跟陌生人交流前,需要理解的基本React知識,這樣才不會一問三不知。以下會先以:props、state、context、refs 以及 lifecycle去做簡單介紹。
從父元件中傳進子元件的資料,是唯讀的,不可在子元件中被更改。
元件內部可變的資料,用來控制UI變化。
提供跨元件(不需層層傳 props)共享資料的方式,例如主題、語言、登入狀態等。通常跟props 用途區別為是否許多元件都需要使用到Value,以登入/登出為例:
可能會好奇為什麼能夠使用AuthContext.Provider的寫法,這攸關於Context底層:
- Provider: // 用來「提供」值
- Consumer: …, // 用來「接收」值(早期寫法)
createContext() 回傳的物件裡面就有這兩個屬性!可以直接寫 <AuthContext.Provider />
Value: 是共享值,在這邊代表傳給AuthContext的共享值,透過useContext(AuthContext)可以存取Value裡面的值。
直接取得 DOM 元素或元件實例的參考,常用來處理像是表單聚焦、動畫、播放控制、滾動捲軸到某處、讀取 DOM 的寬高位置、控制畫布(canvas)、SVG 或第三方元件等。
指一個元件從被建立、更新、到被卸載(移除)的整個過程,就像是一個元件「出生 → 活著 → 死亡」的歷程。現階段基本上都是使用Hooks中useEffect去實現;不過也可以透過非Hooks的方式去實現,但只能使用Class Component的方式去實現。
以下透過兩種方式去呈現比較:
- 掛載(Mounting): 元件第一次出現在畫面上
- 更新(Updating): props 或 state 改變時
- 卸載(Unmounting): 元件從畫面移除時
分別對應:
- useEffect(() => {…}, [])
- useEffect(() => {…}, [依賴])
- useEffect 的 return function
場景應用: