React コンポーネント通信ルーティングパラメータ転送 (react-router-dom)

React コンポーネント通信ルーティングパラメータ転送 (react-router-dom)

最近Reactを勉強していて、今は仕事でVueを使っています。学習の過程で、両者を比較して理解を深めました。

以下は react におけるナレッジポイントのごく一部ですが、個人的には比較的一般的なナレッジポイントでもあると思います。 react コンポーネントが通信する方法の 1 つに、ルーティングパラメータの送信があります ( react コンポーネントが通信する方法は、 props、イベントコールバック、コンテキスト、ルーター、redux、キャッシュなど、数多くあります)。現在、シングルページSPAが広く使用されています。ページ全体を更新せずに一部のページにジャンプするには、ルーティングジャンプを使用する必要があります。また、ページ間のジャンプに加えて、Reactルーティングには、ページまたはコンポーネントを切り替えるときにパラメータを渡すという優れた機能もあり、コミュニケーションの目的を達成できます。

簡単な例を使って、Reactルーティングがどのようにジャンプしてパラメータを渡すかを説明しましょう(この記事ではルーティングパラメータの渡し方に焦点を当てており、ルーティング設定や関連属性については今のところ説明しません)

準備、ルーティング依存関係のインストール:

npm インストール -S react-router-dom

次に、ページにルートを導入します。

'./component/ManageSystem' から Home をインポートします。
'react-router-dom' から { BrowserRouter を Router としてインポートします。
関数App() {
  戻る (
    <Router> //ルート パッケージ。ホームページ内の 1 つ以上のページでルートの切り替えが必要になる場合があります <div id="App">
        <ホーム />
      </div>
    </ルーター>
  );
}
 
デフォルトアプリをエクスポート

ManageSystem.js の一部では、ルーティングによって表示内容を切り替える必要があります。Route は切り替える必要があるコンポーネント、path はルーティング パス、exact は完全一致、Link はリンク、to は Route 内のパスに対応するジャンプのルーティング パスを表し、Redirect はリダイレクトです。

'react' から React をインポートします。
'../utils/loadable' から Loadable をインポートします
「react-router-dom」から {Route、Link、withRouter、Redirect、Switch} をインポートします。
'element-react' から Button をインポートします。
// 最初の画面のレンダリングを高速化するためにコンポーネントを動的にロードします const About = Loadable(() => import('./About.js'))
const Users = Loadable(() => import('./Users.js'))
クラス Home は React.Component を拡張します {
    与える() {
	    戻る (
		<div style={{ position: 'relative' }}>
		    <nav style={{ position: 'absolute', top: '0', left: '60%' }}>
				<ul>
				    <li style={{ marginBottom: '10px' }}>
				        <Link to={{pathname:"/home/about",query:{ text: '666' }}}>概要</Link>
				    </li>
			        <li>
			            <Link to={{pathname:"/home/users/999",state:{ text: '888' }}}>ユーザー</Link>
					</li>
				</ul>
			</nav>
			<div style={{ position: 'absolute', top: '20px', right: '20px' }}>
			    <スイッチ>
				    <ルートの正確なパス="/home" コンポーネント={() => { return null }}>
				    </ルート>
				    <ルートの正確なパス="/home/about" コンポーネント={About}>
				    </ルート>
				    <ルートの正確なパス="/home/users/:id" コンポーネント={Users}>
				    </ルート>
				    <リダイレクト元="/" to='/home' />
			    </スイッチ>
			</div>
		</div>
		);
	}
}
/*
高レベルコンポーネントの withRouter は、コンポーネントを Route にラップするために使用されます。
次に、 react-router、 history、 location、 match の 3 つのオブジェクトがこのコンポーネントの props 属性に配置されます。
*/
ルータ(ホーム)でデフォルトをエクスポート

ここからがポイントです! ! !

ルートを切り替える場合、パラメータを渡す主な方法は3つあります。パス動的パス、クエリ、状態です。

まず、パス動的パス方式では、パスを設定するときに、アドレスに動的パラメータが追加されます。次の動的パラメータは次のとおりです。id

<ルートの正確なパス="/home/users/:id" コンポーネント={Users}>
</ルート>

ページを切り替えたりジャンプしたりする場合は、次のように、送信する情報をアドレスの後に配置します。

<Link to={{pathname:"/home/users/999"}}>ユーザー</Link>

Usersに切り替えるときに、matchを使用して渡された情報を取得できます。Users.jsは次のとおりです。

「react」からReactをインポートします。
クラスUsersはReact.Componentを拡張します。
  コンストラクタ(props) {
    スーパー(小道具)
    この状態 = {
      id: this.props.match.params.id //ここでパス動的パラメータスプライシングを介して渡された情報を取得します}
  }
  コンポーネントマウント(){
    console.log(this.props,'ユーザーのプロパティ')
  }
  与える() {
    戻る (
      <div>
        <span>私はユーザーです: {this.state.id}</span>
      </div>
    )
  }
}
デフォルトユーザーをエクスポート

取得: this.props.match.params.id

小道具を印刷して内容を確認することができます。小道具に情報が存在するかどうかを見つけるのは難しくありません。

対応するプログラムジャンプは次のようになります。

<button onClick={() => { this.props.history.push({ pathname: '/home/users/999' }) }}>について</button>
 
//同様に、this.props.match.params.idを使用して値を取得します

2番目のパラメータ渡し方法はクエリであり、クエリパラメータを通じて情報を渡します。

<Link to={{pathname:"/home/users",query:{ text: '666' }}}>ユーザー</Link>

取得: this.props.location.query.text

同様に印刷して見てください

対応するプログラムジャンプは次のとおりです。

<button onClick={() => { this.props.history.push({ pathname: '/home/users/999', query: { text: '666' } }) }}>ユーザー</button>
 
//同様に、メソッドthis.props.location.query.textを取得します

3 番目のパラメータ渡し方法はstateで、パラメータ state を通じて情報を渡します。使い方は query と同じです。

<Link to={{pathname:"/home/users",state:{ text: '666' }}}>ユーザー</Link>

取得: this.props.location.state.text

同様に印刷して見てください

対応するプログラムジャンプは次のとおりです。

<button onClick={() => { this.props.history.push({ pathname: '/home/users/999', state: { text: '666' } }) }}>ユーザー</button>
 
//同様に、メソッドthis.props.location.state.textを取得します

ps:クエリと状態には重要な違いがあります。つまり、ページがジャンプした後、現在のページを更新すると、クエリは消えますが、状態は消えません。つまり、その場所にまだ保存されています。

テストして、Users.js ページを変更してみましょう。クエリが存在しない場合は、「クエリが消えました」と表示されます。

「react」からReactをインポートします。
クラスUsersはReact.Componentを拡張します。
  コンストラクタ(props) {
    スーパー(小道具)
    この状態 = {
      テキスト: this.props.location.query ? this.props.location.query.text : 'クエリが消えました'
    }
  }
  コンポーネントマウント(){
    console.log(this.props,'ユーザーのプロパティ')
  }
  与える() {
    戻る (
      <div>
        <span>私はユーザーです: {this.state.text}</span>
      </div>
    )
  }
}
デフォルトユーザーをエクスポート

ジャンプすると、データが正常に取得され、クエリが存在する

現在のページを更新するとクエリは消えます

ページには

同じプロセスで、状態パラメータを渡す方法が使用されます。現在のページを更新しても、場所の状態は消えません。状態メソッドが推奨されます。

概要: この記事では主に、React ルーティング ジャンプでパラメータを渡す 3 つの方法について説明します。プロジェクト内のページ ジャンプでジャンプ先のページに特定の情報を渡す必要がある場合は、これらの方法を検討してください。違い:動的アドレス方式はシンプルですが、パラメータ渡し方式は単一で、アドレスにのみ綴ることができ、文字列です。送信される情報が長すぎると、アドレスが乱雑に見え、情報が公開されます。クエリの場合、パラメータ渡し方式は状態と同じですが、1つだけ違いがあります。現在のページにジャンプして更新すると、クエリは消えますが、状態は消えません。

Vue でのルーティング パラメータの受け渡し方法を比較します。

Vue コンポーネント間の通信方法 (複数のシナリオ、わかりやすい、コレクションに推奨)

React コンポーネント通信 - ルーティングパラメータの受け渡し (react-router-dom) に関するこの記事はこれで終わりです。React ルーティングパラメータの受け渡しに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 反応ルーティングでパラメータを渡すいくつかの方法についての簡単な説明
  • Reactルーティングパラメータ転送方法の概要記録の詳細説明

<<:  docker ログ - docker コンテナ ログの実装を表示します

>>:  HTML&CSS&JS 互換性ツリー (IE、Firefox、Chrome)

推薦する

ローカルストレージにブール型の値を保存する際の落とし穴を解決する

LocalStorageはブール値を保存します今日、ブール値データを保存するために localsto...

MySql データベース クエリの特殊コマンド

まずMySQLのインストールMySQLソフトウェアをダウンロードし、インストールパスを変更しますMy...

Vue検証コードコンポーネントの使い方の詳しい説明

この記事の例では、vue検証コードコンポーネントで使用される具体的な実装コードを参考までに共有してい...

js を使用して 2 つの HTML ウィンドウ間で通信する方法

シナリオ: ページAがページBを開くと、ページBで操作した後、ページAは変更されたデータを同期する必...

HTMLはマウスをホバーしたときにテキストを表示するためにtitle属性を使用します。

コードをコピーコードは次のとおりです。 <a href=# title="ここに表示...

Vueでeslintを使用する方法の詳細な説明

目次1. 説明2. 関連する依存パッケージをダウンロードする3. 設定ファイル .eslintrc....

Vueはユーザー名が使用可能かどうかの検証を実装します

この記事では、ユーザー名が使用可能かどうかを確認するためのVueの具体的なコードを例として紹介します...

Vue+EChartsは、中国の地図の描画と省の自動回転と強調表示を実現します。

目次成果を達成する完全なコード + 詳細なコメントまとめ成果を達成する完全なコード + 詳細なコメン...

CSS スタイルにおける中国語フォントのフォントファミリーに対応する英語名の詳細な説明

ソングティ: SimSun太字: SimHeiマイクロソフト YaHei: マイクロソフト YaHe...

MySQL でのフィルター条件なしのカウントの詳細な説明

カウント(*)成し遂げる1. MyISAM: テーブル内の行の総数をディスク上に保存し、フィルタリン...

dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明

問題の起源docker を使用する場合、残念ながら docker コンテナ内のホストのポート 80 ...

SpringBoot + Vue プロジェクトを Linux サーバーにデプロイするための詳細なチュートリアル

序文SpringBoot + Vueのフロントエンドとバックエンドを分離したプロジェクトをどのように...

TypeScript の Enum が問題となる理由

目次どうしたの?いつ使うか列挙の数を制御するビット値コントロールインデックス非数値列挙結論はType...

表内のコンテンツオーバーフローのレイアウト方法について

コンテンツオーバーフローとは何ですか?実際、テキストが大量にある場合、コンテンツ領域がそれだけの長さ...

MySQL で binlog を使用する際のフォーマットの選択方法

目次1. binlogの3つのモード1.ステートメントレベルモード2. 行レベルモード3. 混合モー...