[解決済み] クラスベースのコンポーネントでReact.forwardRefを使用するには?
2022-05-16 03:37:19
質問
React.forwardRefを使おうとしていますが、クラスベースのコンポーネント(HOCではない)で動作させる方法につまづいています。
docsの例では、要素と関数型コンポーネントを使用し、高次コンポーネントのためにクラスを関数でラップしています。
のようなものから始めると
この
の中に
ref.js
ファイルに記述します。
const TextInput = React.forwardRef(
(props, ref) => (<input type="text" placeholder="Hello World" ref={ref} />)
);
というように定義し、代わりにこのような
class TextInput extends React.Component {
render() {
let { props, ref } = React.forwardRef((props, ref) => ({ props, ref }));
return <input type="text" placeholder="Hello World" ref={ref} />;
}
}
または
class TextInput extends React.Component {
render() {
return (
React.forwardRef((props, ref) => (<input type="text" placeholder="Hello World" ref={ref} />))
);
}
}
のみ動作しています:/。
また、私は知っている、refはreactの方法ではないことを知っています。サードパーティのキャンバスライブラリを使おうとしていて、そのツールのいくつかを別のコンポーネントで追加したいので、イベントリスナーが必要で、ライフサイクルメソッドが必要なんです。後で違うルートになるかもしれませんが、これを試してみたいのです。
ドキュメントによると可能なんですね!
Refの転送はDOMコンポーネントに限定されるものではありません。クラスコンポーネントのインスタンスへの参照も転送することができます。
から のメモをこのセクションの
しかし、その後、単なるクラスではなく、HOCを使うようになるのです。
どのように解決するのか?
には常に同じプロップを使うという考え方があります。
ref
はヘルパーでクラスエクスポートをプロキシすることで実現できます。
class ElemComponent extends Component {
render() {
return (
<div ref={this.props.innerRef}>
Div has a ref
</div>
)
}
}
export default React.forwardRef((props, ref) => <ElemComponent
innerRef={ref} {...props}
/>);
ということで、基本的にはpropからforwardのrefは別に持たざるを得ないのですが、ハブの下でも可能です。一般の人が普通にrefとして使うことが重要です。
関連
-
要素ツリー制御によるvueTreeテーブル
-
JSアレイループと効率解析の比較
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
fetch ネットワークリクエストラッパーの説明例
-
Vueの要素ツリーコントロールに破線を追加する説明
-
jQueryのコピーオブジェクトの説明
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
nodejs unhandledPromiseRejectionWarning メッセージ