0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FizzBuzzボタンを作りながらReact Hooksを学ぶ 第5回

Last updated at Posted at 2019-08-03

FizzBuzz ボタンを作りながら React Hooks を学んでいきます。
目次はこちら

マウント、アンマウントされたときの処理を実装する

前回までで Hooks および関数コンポーネントを使う方法で、FizzBuzz ボタンを作りました。
前回の修正ではマウント、アンマウント時の処理を削除してしまいました。今回はそこを実装していきます。

マウント時の処理には Effect Hook を使います。
useEffect の第2引数に [] を指定することで、マウント時に第1引数の関数が実行されます。
また、アンマウント時には第1引数の戻り値の関数が実行されます。

FizzBuzz.tsx(マウント、アンマウント時の処理)
  useEffect(() => {
    console.log('mount');
    return () => console.log('unmount');
  }, []);

全体ではこんな感じ。

FizzBuzz.tsx
import React, { useState, useCallback, useEffect } from 'react';
import FizzBuzzView from './FizzBuzzView';
import { fizzBuzz } from './common';

type Props = {
  // props で count の初期値を受け取る
  initialCount: number;
};

const FizzBuzz: React.FC<Props> = React.memo((props: Props) => {
  const [count, setCount] = useState(props.initialCount);
  const plus1 = useCallback(() => setCount(count => count + 1), []);
  const clear = useCallback(() => setCount(props.initialCount), [
    props.initialCount,
  ]);
  useEffect(() => {
    console.log('mount');
    return () => console.log('unmount');
  }, []);
  const message = fizzBuzz(count);

  return (
    <FizzBuzzView count={count} message={message} plus1={plus1} clear={clear} />
  );
});

export default FizzBuzz;

ここまででひととおり React Hooks を使用した FizzBuzz ボタンは完成です。
今回作成したソースコードはこちら
次回は Custom Hook を作ります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?