fv17の日記

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

りあクト!第2版の学習メモ

Reactのキャッチアップのため、りあクト!第2版を学習中
そのための学習メモ

第8章 Hooksで関数コンポーネントを強化

以前の関数コンポ

  • Local Stateを持てない
  • ライフサイクルメソッドもない
  • HOCを使って上記を持つRecomposeライブラリが意識高い系で流行

Hooksの誕生

  • Recomposeの作者Andrew ClarkがFBにスカウトされ、Hooksを開発(Recomposeの役目は終わる)
  • 2018/10のReactConf 2018で発表
  • 関数コンポーネントにLocal StateやライフサイクルといったReactの機能を『接続する(hook into)』からHooksと名付けられた

Hooksの革新性

  • HOCやRender Propsの弱点である、インデント地獄、可読性の悪さを抹消
  • stateなどの付与したい機能のみを切り出せるため、再利用、テストがしやすい

State Hookの実装例

  import React, { FC, useState } from 'react';
  import { Button, Card, Statistic } from 'semantic-ui-react';

  import './App.css';

  const App: FC = () => {
    const [count, setCount] = useState(0);

    const increment = () => {
      setCount(count + 1);
    }

    const decrement = () => {
      setCount(count - 1);
    }

    return (
      <div className="container">
        <header>
          <h1>カウンター</h1>
        </header>
        <Card>
          <Statistic className="number-board">
            <Statistic.Label>count</Statistic.Label>
            <Statistic.Value>{count}</Statistic.Value>
          </Statistic>
          <Card.Content>
            <div className="ui two buttons">
              <Button color="red" onClick={decrement}>
                -1 
              </Button>
              <Button color="green" onClick={increment}>
                +1
              </Button>
            </div>
          </Card.Content>
        </Card>
      </div>
    )
  }

Effect Hookでライフサイクルを扱う

  • 副作用を扱うHooks
  • クラスコンポのライフサイクルメソッド(componentDidMount()など)の機能を実現
  • 副作用とは、データの取得、DOM改変、ログ出力など

あとは読んでない。下記の方が分かりやすかった。
ja.reactjs.org