### useState
React本体に関数コンポーネント専用の保存領域を作成してもらい、そこにあるデータを読み書きできる
const[count, setCount] = useState(0); return ( <div onClick={()=>setCount(count+1)}>{count}</div> );
複数の値を扱うときは、複数のuseStateを使う
const[count, setCount] = useState(0); const[isRed, setIsRed] = useState(false); return ( <div style={isRed? {color: 'red'}: null} onClick={() => { setCount(count+1); setIsRed((count+1)%3 === 0); }} > {count} </div> );
hooksをifやfor文の中で使用してはいけない
### useMemo
useMemoは単純に値を保存するためのhook
const Calculator = () => { const calcResult = useMemo(() => expensiveFunc(), []); return <div>{calcResult}</div> }
### useCallback
useCallback(func, []) と省略した書き方ができる
const Button = React.memo((props) => { return <button onClick={props.onClick}>Click Me</button> }); const App = () => { const onClick = useCallback(() => alert('Hi!'), []); return <Button onClick={onClick}/> }
### useEffect
コンポーネントのレンダリング後に実行される
const Message = () => { const elem = document.querySelector('#message'); console.log(elem); useEffect(() => { const elem = document.querySelector('#message'); console.log(elem); elem.innerText = "Hello!" }); return <div id="message"></div> }
### useRef
useStateの参照版。useRefを使うことでReact本体側に値を保存でき、オブジェクトでラップされる
const Message = () => { const divRef = useRef(null); useEffect(() => { divRef.current.innerText = 'Hello!'; }, []); return <div ref={divRef}></div> }
実装したい内容に応じて、Hookを使い分けるってことか。