[解決済み] react-router-domを使用する際に「Function components cannot be given refs」を回避する方法は?
2022-03-02 02:18:28
質問
以下のようなものがあります(マテリアルUI使用)...。
import React from "react";
import { NavLink } from "react-router-dom";
import Tabs from "@material-ui/core/Tabs";
import Tab from "@material-ui/core/Tab";
function LinkTab(link){
return <Tab component={NavLink}
to={link.link}
label={link.label}
value={link.link}
key={link.link}
/>;
}
新しいバージョンでは、次のような警告が表示されます。
警告 関数コンポーネントに参照元を与えることはできません。アクセスしようとすると このrefは失敗します。React.forwardRef()を使用するつもりだったのでしょうか?
のrenderメソッドを確認してください。
ForwardRef
. in NavLink (ForwardRefで作成)
に変えてみたのですが・・・。
function LinkTab(link){
// See https://material-ui.com/guides/composition/#caveat-with-refs
const MyLink = React.forwardRef((props, ref) => <NavLink {...props} ref={ref} />);
return <Tab component={MyLink}
to={link.link}
label={link.label}
value={link.link}
key={link.link}
/>;
}
しかし、まだ警告が出ます。どうすればこの問題を解決できるのでしょうか?
解決方法を教えてください。
NavLink
から
react-router
を特殊化した機能部品です。
リンク
を公開する。
innerRef
プロパティを使用します。
// required for react-router-dom < 6.0.0
// see https://github.com/ReactTraining/react-router/issues/6056#issuecomment-435524678
const MyLink = React.forwardRef((props, ref) => <NavLink innerRef={ref} {...props} />);
また、私たちのドキュメントを検索して
react-router
につながる。
https://mui.com/getting-started/faq/#how-do-i-use-react-router
にリンクしています。
https://mui.com/components/buttons/#third-party-routing-library
. 最後のリンクは、動作例と、react-router v6でどのように変更される可能性があるのかを説明しています。
関連
-
[解決済み】Typescript react - モジュール ''react-materialize'' の宣言ファイルが見つかりませんでした。'path/to/module-name.js' は暗黙のうちに any 型を持ちます。
-
[解決済み】React 17で動作するEnzymeアダプターはどれですか?
-
[解決済み】Reactを使用したMapBoxのCSSが欠落している件
-
[解決済み] ReactJS: Warning: setState(...): 既存の状態遷移の間に更新することはできません
-
[解決済み] nginxでcertbotを使用する際の問題点
-
[解決済み] は、gatsby-imageで動作する良いreactのカルーセルコンポーネントはありますか?[って聞かれます。]
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React-routerのURLを更新したり、手動で書き込んだりするとうまくいかない
-
[解決済み] Reactコンポーネントに条件付きで属性を追加するにはどうすればよいですか?
-
[解決済み] React Router v4で履歴にプッシュする方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Reactコンポーネント内でswitchステートメントを使用するには?
-
[解決済み] useStateプロパティのフックにmap関数を使用する方法
-
[解決済み] material-ui-pickers KeyboardDatePicker をモーメントで使用するには?
-
[解決済み] React + TypeScript のエラーです。この呼び出しにマッチするオーバーロードがありません
-
[解決済み] MUI Boxは何のためのコンポーネントですか?
-
[解決済み] React JS Jestで「SyntaxError: 予期しないトークン"
-
[解決済み] Uncaught (in promise) Error: リクエストに失敗、ステータスコード404
-
[解決済み] componentWillReceiveProps は名称が変更されました。
-
[解決済み] nextjsで異なる.envファイルを使用するには?
-
[解決済み] React Hooksの「exhaustive-deps」lintルールを理解する