React 基礎

React 基礎

2025/07/09

環境構築

プロジェクト作成

npm create vite@latest my-react-app

起動

npm run dev

コンポーネント

コンポーネントはマークアップを返す JavaScript の関数。
components ディレクトリ配下に作成し、再利用可能なコンポーネントを作成する。

JSX

タグ名は大文字で始める。
JSX は JavaScript のコードであるため、JavaScript のコードを書くことができる。

波括弧を使うことで、JSX の中から JavaScript に戻ることができる。

const name = 'John';

return (
  <div>
    <h1>Hello, {name}!</h1>
  </div>
);

className を使うことで、CSS クラスを指定することができる。

const className = 'my-class';

return (
  <div className={className}>Hello, world!</div>
);

条件付きレンダリング

論理 && 構文 を使うことで、条件付きレンダリングを行うことができる。

const isLoggedIn = true;

return (
  <div>
    {isLoggedIn && <p>Hello, World!</p>}
  </div>
);

リストのレンダリング

map を使うことで、リストのレンダリングを行うことができる。

const items = ['Item 1', 'Item 2', 'Item 3'];

return (
  <ul>
    {items.map((item, index) => (
      <li key={index}>{item}</li>
    ))}
  </ul>
);

イベントハンドラー

onClick, onChange などのイベントハンドラーを使うことで、イベントを処理することができる。

const handleClick = () => {
  console.log('Button clicked');
};

return (
  <button onClick={handleClick}>Click me</button>
);

状態管理

useState を使うことで、状態を管理することができる。

const [count, setCount] = useState(0);

return (
  <div>
    <p>Count: {count}</p>
    <button onClick={() => setCount(count + 1)}>Increment</button>
  </div>
);

コンポーネント間でのデータの受け渡し

props を使うことで、親コンポーネントから子コンポーネントにデータを受け渡すことができる。

const ParentComponent = () => {
  const [name, setName] = useState('John');

  return <ChildComponent name={name} />;
};

interface ChildComponentProps {
  name: string;
}

const ChildComponent = ({ name }: ChildComponentProps) => {
  console.log(name);
  return <div>Hello, {name}!</div>;
};

子コンポーネントから親コンポーネントのデータを更新するには、useStatesetState を使うことで、親コンポーネントのデータを更新することができる。
これにより、データの流れを一方向にすることができる。

const ParentComponent = () => {
  const [name, setName] = useState('John');

  return <ChildComponent name={name} setName={setName} />;
};

interface ChildComponentProps {
  name: string;
  setName: (name: string) => void;
}

const ChildComponent = ({ name, setName }: ChildComponentProps) => {
  const handleClick = () => {
    setName('Jane');
  };
  return <button onClick={handleClick}>Click me</button>;
};

コンポーネントのライフサイクル

useEffect を使うことで、コンポーネントのライフサイクルを管理することができる。
useEffect の第一引数には、依存配列を渡すことができる。
依存配列が空の場合は、コンポーネントが初めてレンダリングされたときに実行される。
依存配列が空でない場合は、依存配列の値が変化するたびに実行される。

const MyComponent = () => {
  const [count, setCount] = useState(0);

  useEffect(() => {
    // マウント:コンポーネントが初めてレンダリングされたとき
    console.log('Component mounted');

    return () => {
      // アンマウント:コンポーネントが削除されたとき
      console.log('Component unmounted');
    };
  }, []);

  useEffect(() => {
    // 更新:コンポーネントが再レンダリングされたとき
    console.log('Component updated');
  }, [count]);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
};