サイトアイコン 上尾市のWEBプログラマーによるブログ

「Reactハンズオンラーニング」の感想・備忘録4

「Reactハンズオンラーニング」の感想・備忘録3の続き

フック

7.3 useReducer

const [checked, setChecked] = useState(false)
return (
  <p><input type="checkbox" value={checked} onChange={()=>setChecked(checked => !checked)}>{checked ? "ON" : "OFF"}</p>
);
const [checked, toggle] = useReducer(checked =>!checked, false)
return (
  <p><input type="checkbox" value={checked} onChange={toggle}/>{checked ? "ON" : "OFF"}</p>
);
const [checked2, toggle2] = useReducer((checked2, num) => {
  console.log(num)
  return !checked2
}, 
return (
    <p><input type="checkbox" value={checked2} onChange={()=> toggle2(777)}/>{checked2 ? "ON2" : "OFF2"}</p>
);

7.3.1 useReducerを使った複雑なステート管理

function Reducer2() {
  const initUser = {
    id: 1,
    name: 'hoge',
  }
  const [user, setUser] = useReducer((user, newValues) => ({...user, ...newValues}), initUser)
  return (
    <div>
      {user.id}: {user.name}
      <button onClick={()=>setUser({name: 'hogehoge'})}>setUser</button>
    </div>
  );
}

7.4 コンポーネントのパフォーマンス改善

import {memo} from 'react'
function Memo({msg}) {
  console.log("rendering Memo")
  return (
    <div style={{border: "1px solid #ccc", padding: "50px"}}>
      <h2>Mmeo.js</h2>
      <p>{msg}</p>
    </div>
  );
}

export default memo(Memo);

7.4.1 いつパフォーマンスチューニングを行うか

モバイルバージョンを終了