ReactJSとTypeScriptでrefsを使いこなして開発を効率化
ReactJSとTypeScriptでrefsを使う方法
refsの基本的な使い方
まず、useRef
フックを使って、ref
という変数を初期化します。
const ref = useRef<HTMLInputElement>(null);
このコードは、ref
という変数をHTMLInputElement
型で初期化しています。これは、ref
が常にHTMLInputElement
型の値を参照することを保証します。
次に、ref
変数をDOM要素に渡します。
<input ref={ref} />
これで、ref
変数は、このinput
要素への参照を取得します。
refsを使ってできること:
- DOM要素の値を取得・設定する
- DOM要素にフォーカスを当てる
- DOM要素のイベントを処理する
- コンポーネント間の参照を渡す
TypeScriptを使うことで、refsの使用をより安全かつ型安全にすることができます。
例:
ref
変数の型を指定することで、型エラーを防ぐことができます。ref.current
プロパティの型を指定することで、値を取得する際に型変換を行う必要がなくなります。
const ref = useRef<HTMLInputElement>(null);
// 型安全な方法でinput要素の値を取得する
const value = ref.current!.value;
useRef
フックは、DOM要素以外にも、オブジェクトや関数など、さまざまな値を保持するために使用できます。- refsは、パフォーマンスの最適化にも役立ちます。
refsは、Reactコンポーネント内にあるDOM要素やその他のオブジェクトへの参照を取得する便利な機能です。TypeScriptと組み合わせることで、より安全で型安全なコードを書くことができます。
import React, { useRef } from 'react';
const App = () => {
const inputRef = useRef<HTMLInputElement>(null);
const handleClick = () => {
// 型安全な方法でinput要素の値を取得する
const value = inputRef.current!.value;
// 値をコンソールに出力する
console.log(value);
};
return (
<div>
<input ref={inputRef} />
<button onClick={handleClick}>送信</button>
</div>
);
};
export default App;
ポイント:
ref
変数をinput
要素に渡しています。handleClick
関数のvalue
変数は、inputRef.current!.value
という型安全な方法で取得しています。
実行方法:
- 上記のコードを
App.tsx
というファイルに保存します。 - 以下のコマンドを実行して、プロジェクトを作成します。
npx create-react-app my-app
- 作成されたプロジェクトフォルダに移動し、以下のコマンドを実行して、コードを実行します。
npm start
- ブラウザで
http://localhost:3000
を開くと、サンプルコードが表示されます。 input
要素に値を入力して、送信
ボタンをクリックすると、コンソールに値が出力されます。
refsを使う他の方法
useRef
フックとジェネリック型を使うことで、ref
変数の型をより細かく指定することができます。
const ref = useRef<HTMLInputElement>(null);
// 型安全な方法でinput要素の値を取得する
const value = ref.current!.value;
forwardRef
を使うことで、カスタムコンポーネントにref
を渡すことができます。
const MyComponent = forwardRef((props, ref) => {
// ...
return (
<input ref={ref} />
);
});
createRef
を使うことで、ref
オブジェクトを作成することができます。
const ref = createRef<HTMLInputElement>();
// ...
<input ref={ref} />
const ref = useRef((element: HTMLInputElement) => {
// ...
});
// ...
<input ref={ref} />
これらの方法は、それぞれ異なるメリットとデメリットがあります。詳細は以下の記事を参照してください。
refsを使う方法はいくつかあります。状況に応じて、最適な方法を選択してください。
reactjs typescript