質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2199閲覧

React.forwardRefのジェネリクス型指定について

tanana_m

総合スコア28

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/07/16 06:53

知りたいこと

React.forwardRefを利用した以下のようなコードがあります。

tsx

1import * as React from 'react' 2 3type ButtonProps = React.HTMLProps<HTMLButtonElement> 4 5const FancyButton = React.forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => ( 6 <button type="button" ref={ref} className="FancyButton"> 7 {props.children} 8 </button> 9)) 10 11const ref = React.createRef<HTMLButtonElement>() 12 13<FancyButton ref={ref}>Click me!</FancyButton>

このとき5行目でforwardRefのジェネリクスに指定している<HTMLButtonElement, ButtonProps>の意味がわかりません。

forwardRefの型定義を見ると以下のようになっています。

ts

1function forwardRef<T, P = {}>(render: ForwardRefRenderFunction<T, P>): ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>>;

このTPにあたるものを指定しているのだと思いますが、それぞれどのような値(型)を設定すべき項目なのでしょうか。
ご教示宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

React.forwardRef の引数に渡しているコンポーネントの型とそのPropsの型を指定します。

HTMLButtonElement について

React の型定義には HTMLElement を継承した HTML{ほにゃらら}Element が標準であります

HTML Element の名前で補完が効くと思います。

<input /> なら HTMLInputElement
<button /> なら HTMLButtonElement
<div /> なら HTMLDivElement

Element の ref 系のジェネリクス型指定の際によく使います。

ButtonProps について

type ButtonProps = React.HTMLProps<HTMLButtonElement>

の部分は HTMLElement 型から props の型を取り出す React.HTMLProps<T> という util を使っています。

React component 型から props を取り出す React.ComponentProps<T> の HTMLElement 用です。

// <button /> の Props 型を取り出す type ButtonProps = React.HTMLProps<HTMLButtonElement> // <Component /> の Props 型を取り出す type Props = React.ComponentProps<typeof Component>

投稿2021/07/16 07:26

anozon

総合スコア662

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問