警告 関数コンポーネントに参照を与えることはできません
2022-03-20 14:57:03
警告 関数コンポーネントに参照番号を与えることはできません。この参照にアクセスしようとすると失敗します。
問題の発生源
子コンポーネントがあり、外部の親コンポーネントは参照を通じて子コンポーネントのDOMを取得します。現在、子コンポーネントに翻訳(国際化)を追加する必要があります。
export default ChildComponent;
// Change it to the following
export default withTranslation('translation')(ChildComponent);
翻訳を追加すると、エラーが報告されます
Warning: Function components cannot be given refs.
Attempts to access this ref will fail.
Did you mean to use React.forwardRef()?
問題の理由
親コンポーネントがrefで子コンポーネントのノードを取得し(子コンポーネントはクラスで作成)、withTranslationラッピングを使用して子コンポーネントを関数で作成したためです。関数で作成された子コンポーネントはrefを追加することができません。これを解決するためにReact.forwardRefを使用することが公式に推奨されています。
Baiduの結果、reduxでもこの問題が発生します。
export default connect(stateToProps, null, null, { forwardRef: true })(ChildNode);
解決方法
Reactの公式サイトが詳しいので、React.forwardRef()メソッドを試したのですが、うまくいきませんでした。i18nのサイトで推奨されているメソッドを見てみたところ( https://react.i18next.com/latest/withtranslation-hoc ) use ref (>= v10.6.0) のように、forwardRefを使うことができます。
const Wrapped = withTranslation('translation', { withRef: true })(MyComponent);
// then pass a ref in your render method like
const myRef = React.createRef();
<Wrapped ref={myRef} />;
// use myRef.current to access it
その後、出力をそのように変更したところ、プロジェクトは正常に動作しました。ここでの知識は、refは高次のコンポーネントで値を渡すということです。
export default withTranslation('translation', { withRef: true })(ChildComponent);
参考資料
https://blog.csdn.net/he452460213/article/details/103911923
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例