[解決済み] Reactフックで入力を処理する
2022-11-18 18:50:13
質問
フックを使ってテキスト入力を処理する方法がいくつかあるようです。フックで入力を処理する方法として、より好ましい、あるいは適切な方法は何でしょうか?あなたならどれを使いますか?
1) 最もシンプルなフックですが、フィールドが多くなればなるほど、繰り返し書かなければならないコードも多くなります。
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
のイベントがあります。
onChange={event => setPassword(event.target.value)}
onChange={event => setUsername(event.target.value)}
2) 上記の例と似ていますが、動的なキー名を使用します。
const [inputValues, setInputValues] = useState({
username: '', password: ''
});
const handleOnChange = event => {
const { name, value } = event.target;
setInputValues({ ...inputValues, [name]: value });
};
のイベントです。
onChange={handleOnChange}
3)代替案として
useState
の代わりになるもので、ReactJSのドキュメントにも書かれているように
useReducer
は通常
useState
.
const [inputValues, setInputValues] = useReducer(
(state, newState) => ({ ...state, ...newState }),
{username: '', password: ''}
);
const handleOnChange = event => {
const { name, value } = event.target;
setInputValues({ [name]: value });
};
のイベントです。
onChange={handleOnChange}
4)
useCallback
は、依存関係の1つが変更された場合にのみ変更されるコールバックのメモ化されたバージョンを返します。
const [inputValues, setInputValues] = useState({
username: '', password: ''
});
const handleOnChange = useCallback(event => {
const { name, value } = event.target;
setInputValues({ ...inputValues, [name]: value });
});
のイベントです。
onChange={handleOnChange}
どのように解決するのですか?
入力値を返す再利用可能な関数を書くのはどうでしょう ... そして
<input>
そのものを返す再利用可能な関数を書いてみてはどうでしょうか。
function useInput({ type /*...*/ }) {
const [value, setValue] = useState("");
const input = <input value={value} onChange={e => setValue(e.target.value)} type={type} />;
return [value, input];
}
という風に使うことができます。
const [username, userInput] = useInput({ type: "text" });
const [password, passwordInput] = useInput({ type: "text" });
return <>
{userInput} -> {username} <br />
{passwordInput} -> {password}
</>;
関連
-
[解決済み] アクシオスは定義されていません
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] useEffect React Hook使用時の依存性欠如の警告を修正する方法
-
[解決済み] React HooksでcomponentWillMount()を使用するには?
-
[解決済み】react hooksで`setState`コールバックを使用する方法
-
[解決済み】React Hooks useState()でオブジェクトを使用する。
-
[解決済み】React Hooks useEffectでoldValuesとnewValuesを比較する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ngrokがReact devサーバーに接続しようとすると、無効なホストヘッダが表示される。
-
[解決済み] SVGサークル内の画像にボーダーを追加する方法
-
[解決済み] Webpack + Babelです。プリセット "es2015 "がディレクトリに相対して見つからなかった
-
[解決済み] リアクトです。<tr>は<td>の子として表示できません。コメント > td > tr を参照してください。
-
[解決済み] Angular 2の*ngForのReactでの同等品
-
[解決済み] react.jsでng-ifに相当するものは何ですか?
-
[解決済み] ReactJS で inst.render が関数でないエラーが発生する
-
[解決済み] Reactプロジェクトに.envファイルを追加する
-
[解決済み] React」は定義される前に使用されていた
-
[解決済み] React JSXのforEach()でHTMLが出力されない