iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
自我挑戰組

前端菜鳥的react初體驗系列 第 25

前端菜鳥的react初體驗 Day25-Hook-自定義hook

  • 分享至 

  • xImage
  •  

其實react官方的hook還有滿多的。
比如:

  • useImperativeHandle
  • useLayoutEffect
  • useDebugValue
  • useDeferredValue
  • useTransition
  • useId

不過這些比較沒有這麼常出現,如果之後有機會再好好的研究一下(沒錯,我也還不會)。

那麼,就直接進入到hook的最終篇:自定義hook。

我自己會覺得,hook其實有點類似一種功能性的component,把一個會重複利用到的東西,整包抽出來,要用的時候再呼叫。
所以整個自定義的hook,裡面可以包含useState、useEffect或者其他你想使用的hook,但凡會重複利用到的邏輯,都可以包進來。
https://ithelp.ithome.com.tw/upload/images/20221010/20152660eeoAss9j77.jpg

關於hook怎麼用,react是這麼說的:

換句話說,它就像一個普通的 function,它的命名開頭應該總是為 use。
是的,重點就是以use開頭!這!就是重點
https://ithelp.ithome.com.tw/upload/images/20221010/20152660bi5hMVhwM5.png

那麼就先來看一下code吧!

首先,我們會有一個自定義的hook,他需要是use開頭。
接下來,就像是怎麼寫compoment一樣寫就好了。
(好好笑,因為真的不用解釋,一路走來我們都看得懂這些東西了吧?)

import { useState, useEffect } from "react";

const useFetch = (url) => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch(url)
      .then((res) => res.json())
      .then((data) => setData(data));
  }, [url]);

  return [data];
};

export default useFetch;

接著,呼叫這個你自定義的hook。
該傳什麼參數就傳什麼參數,就跟我們用其他的hook一樣。

import ReactDOM from "react-dom/client";
import useFetch from "./useFetch";

const Home = () => {
  const [data] = useFetch("https://jsonplaceholder.typicode.com/todos");

  return (
    <>
      {data &&
        data.map((item) => {
          return <p key={item.id}>{item.title}</p>;
        })}
    </>
  );
};

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Home />);

那麼,我們好像就,這樣走完了hook的旅程了?
https://ithelp.ithome.com.tw/upload/images/20221010/201526602NvkKidLrc.jpg


上一篇
前端菜鳥的react初體驗 Day24-Hook-useMemo
下一篇
前端菜鳥的react初體驗 Day26-To Do list
系列文
前端菜鳥的react初體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言