經過昨天對Hook有個初步的認識之後,下方介紹幾個Hook的範例。
下面用計時器作介紹
import React, { useState } from 'react';
function Example() {
  // 宣告一個新的 state 變數,名字叫做「count」,類似於class中的
  // this.state = {
      count: 0
    };
  const [count, setCount] = useState(0);
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}
useState:回傳目前state數值(count)和一個更新state數值的function(setCount)。
state裡面可以放字串、物件、陣列,且state可以拆成多個useState(),或是全部塞在同一個useState()裡面。
function ExampleWithManyStates() {
  // 宣告多個 state 變數!
  const [age, setAge] = useState(42);
  const [fruit, setFruit] = useState('banana');
  const [todos, setTodos] = useState([{ text: 'Learn Hooks' }]);
  // ...
}
Effect(副作用)從字面上可以解釋為除了主要作用之外,所產生出的額外作用。用JS的表達式作例子的話,會變動原本的變數的值的話,便稱作帶副作用的表達式。如counter++、x += 3等。
Hook中useEffect便是帶有副作用的function,會依據每次變數的變化,刷新useEffect裡面的function,下面的計時器例子中便是在每次點擊按鈕時除了刷新點擊次數外,瀏覽器的titlt也會不斷刷新。
import React, { useState, useEffect } from 'react';
function Example() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    // 每次點擊時更新文件標題
    document.title = `You clicked ${count} times`;
  });
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}