Open9

React

kzk4043kzk4043

制御、非制御

  • Reactに値を管理させる(制御コンポーネント)
  • DOMに値を管理させる(非制御コンポーネント)

https://qiita.com/nuko-suke/items/1393995fd53ecaeb1cbc

制御
import React, { useState } from 'react';

const ControlledForm = () => {
  // ReactのuseStateフックを使用してフォームの入力値を管理
  const [inputValue, setInputValue] = useState('');

  // 入力変化時に実行される関数
  const handleChange = (event) => {
    setInputValue(event.target.value); // 入力値を状態にセットする
  };

  // フォーム送信時に実行される関数
  const handleSubmit = (event) => {
    event.preventDefault(); // フォーム送信時のページリロードを防ぐ
    alert(`送信された値: ${inputValue}`); // 入力値をアラート表示
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        入力:
        <input
          type="text" // テキスト入力フィールド
          value={inputValue} // 入力値をstateにバインド
          onChange={handleChange} // 入力中の変化をhandleChangeで受け止める
        />
      </label>
      <button type="submit">送信</button> {/* 送信ボタン */}
    </form>
  );
};

export default ControlledForm;

Reactっぽくて直感的に扱いやすいが、Input一文字ごとに再レンダリングが走ってしまう。バリデーションも手続き的になりがち

非制御
import React, { useRef } from 'react';

const UncontrolledForm = () => {
    // useRefで参照を作成
    const nameInputRef = useRef(null);

    const handleSubmit = (event) => {
        event.preventDefault();
        // refを使って入力内容にアクセス
        alert(`Entered Name: ${nameInputRef.current.value}`);
    };

    return (
        <form onSubmit={handleSubmit}>
            <div>
                <label htmlFor="name">Name: </label>
                <input type="text" id="name" ref={nameInputRef} />
            </div>
            <div>
                <button type="submit">Submit</button>
            </div>
        </form>
    );
};

export default UncontrolledForm;

非制御はパフォーマンスに優れるものの、ちょっと直感的じゃない感じ…RHFとかいれるとバリデーションも複雑なことが割と簡単にできる。
https://zenn.dev/soma3134/scraps/e4aaa6f3bf3066

kzk4043kzk4043

<Component />Component()は違う

Component()
評価された時点で関数コンポーネントが呼び出される

<Component />
React.createElement(Component, null, null)
Component を呼び出すタイミングは React.createElement 側に委
ねられている
React のライフサイクルで管理される

kzk4043kzk4043

公式Docsおさらい

インストール

「ルーティングやデータ取得が必要ない場合でも」FWおすすめしてるのか。
vite+reactって流行ってなかったっけ…置いてかれてる…

kzk4043kzk4043

hooks

https://zenn.dev/steelyard/articles/14a521cb0c46c0

  • 目的
    • 再利用
    • 責務の分離
    • テスタビリティ

https://zenn.dev/ryusou/scraps/931f7eeee5db08

自分の中のcustom hooksを作るタイミングとして「複数のComponentで共有したいような汎用的な処理」が出てきたときに src/hooks に汎用hooksとして切り出す、という形をとっていました。
ただ、このルールだと「他のComponentとかぶる処理はないけどロジックが多めなComponent」の内部ロジックがどんどん膨らんできてしまうんですよね。

kzk4043kzk4043

大きく

  1. 再利用のための切り出し
  2. コンポ肥大化を抑えるための切り出し

に分けられる気がする。1はsrc/hooksフォルダとかを作って管理し、2は各コンポ内にファイル作ればよさそうな気がする