タイトル : react チュートリアル:三目並べ(2023/09)
更新日 : 2023-10-01
カテゴリ : プログラミング
タグ :
frontend   
react   

チュートリアル:三目並べ

本家のチュートリアル:三目並べ です。

typescriptで勉強しているので、以下も参考にします。

TypeScript × React-Tutorial: Tic-Tac-Toe / 三目並べ

公式のページに書いてある大事なこと。

  • クロージャーを使っていること
const Game: React.FC = () => {
  const [history, setHistory] = useState<Array<HistoryData>>([  ★変数作っておいて
    { squares: Array(9).fill(null) },
  ]);
  const [stepNumber, setStepNumber] = useState<number>(0);
  const [xIsNext, setXIsNext] = useState<boolean>(true);
  
  const handleClick = (i: number) => {     ★handleClickの定義の中で上記の変数を使用すること。
    const _history = history.slice(0, stepNumber + 1);
    const current = _history[_history.length - 1];
  • 同じようなonClick()を呼び出すのではなく、onClick()を呼び出す定義を作るrenderSquare()を呼び出す
const Board: React.FC<BoardProps> = ({ squares, onClick }) => {
  const renderSquare = (i: number) => {
    return <Square value={squares[i]} onClick={() => onClick(i)} />;  ★renderSquareを介して、その中のアロー定義で、squares[i]とonClickを結びつける
  };

return (
    <div>
      <div className="board-row">
        {renderSquare(0)}  ★  {renderSquare}ではなく、()がついている
        {renderSquare(1)}
        {renderSquare(2)}
  • イミュータビリティは重要(イミュータビリティ(不変性, immutability)とミューテート(書き換え, mutate))
  const _history = history.slice(0, stepNumber + 1);
  slice()でピーを作成して操作する。

本家の抜粋
イミュータビリティには、もう 1 つの利点があります。デフォルトでは、親コンポーネントの state が変更されると、
すべての子コンポーネントは自動的に再レンダーされます。これには state 変更によって影響を受けていない子コンポーネントも
含まれます。
再レンダー自体はユーザに気付かれないものですが(積極的に避ける必要はありません!)、パフォーマンス上の理由から、
影響を受けていないことが明らかなツリーの一部の再レンダーをスキップしたい場合があります。
  • stateのリフトアップ。これは別途勉強しようね

  • [...history, nextSquares] の ...history はスプレッド構文です