來學 React 吧之五_prop drilling 與 context


Posted by Christy on 2021-11-10

本文為學習 React 最後一個重要概念 useContext 的讀書筆記

prop drilling 簡單來說就是,當父層要傳遞 props 給子層時,假設 component 包了很多層,例如「一個按鈕外面包了三層 div 之類的」,那在按按鈕時,就必須把 props 一直傳下去,才能夠點擊到最後想要到達的子層,而 useContext 的出現就是為了解決層層傳遞的問題。

1. useContext 怎麼用?

a. 先引入兩個 hook

import { useContext, createContext } from "react";

b. 命名一個 TitleContext

const TitleContext = createContext();

c. 用 <TitleContext.Provider></TitleContext.Provider> 把要層層傳遞的父層包起來

d. 接著在子層「想要使用的 fn component 裡面」,const passContext = useContext(TitleContext)

import { useContext, createContext } from "react";

const TitleContext = createContext();

// 這裡是子層
function FinalLayer() {
  const passContext = useContext(TitleContext);
  return (
    <div>我是其他內容</div>
  )
}

// 這裡是父層
export default function Demo() {
  return (
    <TitleContext.Provider value={passContext}>
      <div>我是內容</div>
    </TitleContext.Provider>
  )
}

e. value 裡面也可以傳一個陣列

<TitleContext.Provider value={[title, setTitle]}>
  <div>我是內容</div>
</TitleContext.Provider>

在接收的時候就這樣寫:

const [title, setTitle] = useContext(TitleContext)

f. 還記得最初一開始有一個 theme provider 嗎?那個就是用 context 來實作的










Related Posts

Git 與 Github 版本控制基本指令與操作入門教學

Git 與 Github 版本控制基本指令與操作入門教學

[FE301] React 基礎(Class component 版)先別急著學 React

[FE301] React 基礎(Class component 版)先別急著學 React

[Linux] 使用 dd 指令測試 disk IO 效能

[Linux] 使用 dd 指令測試 disk IO 效能


Comments