iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
Modern Web

我的React學習筆記系列 第 15

資料互傳的Hook-useContext

  • 分享至 

  • xImage
  •  

資料父傳子props是最常見的形式,若今天資料想要傳給同層的兄弟姊妹或是傳給下下層的元件呢? useContext就出場拉! 但我們先要了解什麼是Global State。

Global State

之前說render是蓋房子,那房子與房子之間的公共區域就是我們的Global State,每個有房子擁有權的人都可以使用這個公共區域的資源。

範例

在一個新網站的UI中我們設定好每個頁面按鈕需統一顏色,那麼我們可以先建立一個顏色資料庫,再使用useContext創造出一個Global State資料庫,讓每個元件都可以去取用(不用擔心會有不一致的問題)。

const themes = {
  light: {
    foreground: "#000000",
    background: "#eeeeee"
  },
  dark: {
    foreground: "#ffffff",
    background: "#222222"
  }
};
const ThemeContext = React.createContext(themes.light);

公共區域裡面的資料庫就多了一筆themes.light,當元件要取用時先找到公共區域ThemeContext的名稱,加上.Provider將valu傳入,那麼<ThemedButton />就可以使用到themes.light的顏色資料庫。

function App() {
  return (
    <ThemeContext.Provider value={themes.light}>
      <ThemedButton />
    </ThemeContext.Provider>
  );
}
function ThemedButton() {
  const theme = useContext(ThemeContext);
  return (
    <button style={{ background: theme.background, color: theme.foreground }}>
      I am styled by theme context!
    </button>
  );
}

這樣的方式就可以讓元件不管隔多少代都可以取用同一份資料,達到多層元件的溝通。


上一篇
操作副作用的Hook-useEffect
下一篇
保存資料的Hook-useRef(上)
系列文
我的React學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言