Reactはルーティングを使用してログインインターフェースにリダイレクトします

Reactはルーティングを使用してログインインターフェースにリダイレクトします

前回の記事では、webpack と react 環境を設定した後、ログイン インターフェースとその後のホームページへのジャンプ機能の作成を開始しました。

1. まず、全体的なディレクトリ構造を確認します。

他の人が書いた例を見ていると、ディレクトリ構造に馴染みがないために予期しない問題が発生することがよくあります。

全体的なディレクトリ構造

2. 一般的なプロセス:

1) webpack 構成エントリ ファイル src/index.js
2) index.htmlを実行した後、まずエントリファイルsrc/index.jsをロードします。
3) ルーティングテーブルをロードする src/router/index.js
4) ルーティングテーブルの設定に従って、ログインインターフェースsrc/login.jsが最初にロードされます。
5) ログインインターフェースに正常にログインしたら、src/components/myView.jsに移動します。
6) myView ファイルの左側のメニューをクリックすると、指定されたページ (すべてルーティング テーブルで設定されている) が表示されます。

3. HTML ファイルを作成します。

その中で、1) id myContent は、作成したコンポーネントを配置するために使用されます。
2) スクリプトに読み込まれるファイルは、webpack によってパッケージ化された js ファイルです。

<本文>
 <div id="myContent"></div>
 <script src="./dist/bundle.js"></script>
</本文>

4. ログインインターフェースはlogin.jsで記述されています

1) 必要なモジュールを導入する: antd (Ant Design) はコンポーネント ライブラリであり、プロジェクトで使用されるすべてのコンポーネントはそこから取得されます。 (https://ant.design/index-cn) (antd.cssが導入されていない場合、インターフェースにスタイルが表示されません)

'react' から React をインポートします
'antd' から {Form,Input,Icon,Button} をインポートします。
// 'react-dom' から {render} をインポートします
// 'axios' から axios をインポート

import '../node_modules/antd/dist/antd.css' //このファイルをインポートしないと、antd スタイルは表示されません import './style/login.css';

2) ログインフォームコンポーネントを作成します。基本的な Form、Input、Button コンポーネントに加えて、ジャンプ機能を実装するための主な関数は history.push('/View'); (history = this.props.history;) です。push 関数内のパスはルーティング テーブル () で設定されているパスであり、この 2 つは対応している必要があります。

クラスLoginFromはReact.Componentを拡張します{
 コンストラクタ(){
 素晴らしい()
 }

 ハンドル送信 = (e) => {
 //送信する前に、入力フィールドにエラーがないか確認します。e.preventDefault();
 
 **history = this.props.history; とします。**
 this.props.form.validateFields((エラー、値)=>{
  if (!エラー) {
  console.log('フォームの受信値: ', values);
  **history.push('/View');**
  }
 })
 }

 与える(){
 //Form.create でラップされたコンポーネントには、独自の this.props.form プロパティがあり、次の 4 つを含む一連の API が提供されます //getFieldDecorator は、フォームとの双方向バインディングに使用されます //isFieldTouched は、入力コントロールが getFieldDecorator の値収集タイミングを経験したかどうかを判断します options.trigger (子ノードの値を収集するタイミング、デフォルトは onChange)
 //getFieldErrorは入力コントロールのエラーを取得します
 // 入力コントロールのグループのエラーを取得します。パラメータが渡されない場合は、すべてのコンポーネントのエラーが取得されます。
 const { getFieldDecorator、getFieldsError、getFieldError、isFieldTouched } = this.props.form;
 const userNameError = isFieldTouched('userName') && getFieldError('userName');
 const passWordError = isFieldTouched('password') && getFieldError('password');
 戻る (
  <div className="ログイン">
  <div className="ログインフォーム">
   <div className="ログインロゴ">
   <div className="ログイン名">MSPA</div>
   </div>
   <フォーム onSubmit={this.handleSubmit}>
   {/* getFieldDecorator でデコレートされた子を FromItem に配置します */
   <フォーム.アイテム
    validateStatus={userNameError ? 'error' : ''} //validateStatus は検証ステータスです。設定されていない場合は、検証ルールに従って自動的に生成されます。オプション: 'success' 'warning' 'error' 'validating'
   >
   {
    getFieldDecorator('ユーザー名',{
    ルール:[{required:true,message:"ユーザー名を入力してください!"}]
    })(
    <入力プレフィックス={<Icon type="user" style={{ color: 'rgba(0,0,0,.25)' }}/>}
     placeholder="ユーザー名"
    />
    )
   }
   </フォーム.アイテム>
   <フォーム.アイテム
    検証ステータス={passWordError ? "エラー" : ''}
   >
   {
    getFieldDecorator('passWord',{
    ルール:[{required:true,message:"パスワードを入力してください!"}]
    })(
    <入力プレフィックス={<アイコン type="lock" style={{ color: 'rgba(0,0,0,.25)' }}/>}
     プレースホルダー="パスワード"
    />
    )
   }
   </フォーム.アイテム>
   <フォーム.アイテム>
    <ボタン
    タイプ="プライマリ"
    htmlType="送信"
    無効 = {hasErrors(getFieldsError)}
    >ログイン</ボタン>
   </フォーム.アイテム>
   </フォーム>
  </div>
  </div>
 )
 }
}
LoginForm を Form.create() に設定します。
デフォルトのLoginFormをエクスポートします。

3. 2 番目のステップでは静的ページを記述しました。次のステップはルーティング テーブルを構成することです**。 **ルーターフォルダ内のindex.jsにルーティング情報を設定しました。 react-router の中国語ドキュメント (https://react-guide.github.io/react-router-cn/) では、歴史の簡単な紹介を参照できます (https://www.jb51.net/article/208929.htm)。これは比較的簡単にすぐに理解できます。


コードは次のとおりです。最初の 3 行で導入されたモジュールは基本モジュールであり、後でインポートされたモジュールは事前に作成されたコンポーネントです。ホームページにはログイン インターフェイスが表示され、ログインが成功すると myView インターフェイスにジャンプします。myPicture と myDocument は、myView インターフェイスをクリックした後に表示されるコンポーネントです。 (ネストされたルート)

'react' から React をインポートします
'react-router-dom' から {HashRouter を Router 、 Route 、 Switch としてインポートします。
「history」から createBrowserHistory をインポートします。

'../components/myView.js' から MyView をインポートします。
'../login.js' から LoginModule をインポートします。
'../components/myPicture' から MyPicture をインポートします。
'../components/myDocument.js' から MyDocument をインポートします。

デフォルトクラスMyRouteをエクスポートし、React.Componentを拡張します{
 与える(){
 戻る(
  <ルーター履歴={createBrowserHistory()}>
  <スイッチ>
   <ルートの正確なパス="/" コンポーネント={LoginModule}/>
   <MyView パス='/View' コンポーネント={MyDocument}>
   <ルート パス="/View/abc" コンポーネント={MyDocument} />
   <ルート パス="/View/myPicture" コンポーネント={MyPicture} /> 
   </マイビュー> 
  </スイッチ>
  </ルーター>
 )
 } 
}

4. 次に、src フォルダー内の index.js (プログラムのエントリ ファイル) ファイルに次のコードを記述します。

'./router/index.js' から MyRoute をインポートします。
'react-dom' から {render} をインポートします。
'react' から React をインポートします
与える(
 <マイルート />, 
 ドキュメントの要素IDを取得する('myContent')
);

5. プログラムテストの結果は次のとおりです。

1) ログインインターフェース (login.js):


2) ユーザー名とパスワードを入力し、ログイン ページ (myView.js) をクリックします。

ここに画像の説明を挿入

React ルーティングを使用してログイン インターフェースにリダイレクトする方法についての記事はこれで終わりです。React ルーティングを使用してログイン ページにリダイレクトする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • React+Ant Design開発環境をセットアップするための実装手順
  • ViteでReactプロジェクトを構築する方法
  • 入力ボックスの値を取得する方法のReactの例
  • Reactはラジオコンポーネントのサンプルコードを実装します
  • React Contextの理解と応用についてお話ししましょう
  • Reactフック入門チュートリアル
  • React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス
  • React Routerの歴史について簡単に説明します
  • Redux Toolkit で Redux を簡素化する方法

<<:  MySQL 5.7 でパスワードを変更する簡単な方法

>>:  dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明

推薦する

mysql-canal-rabbitmq のインストールと展開の非常に詳細なチュートリアル

目次1.1. MySQL binlog を有効にする1.2. RabbitMQ の交換とキューを構成...

Dockerでnginxを実行し、ローカルディレクトリをイメージにマウントする方法

1 hupからイメージを取得する docker プル nginx 2 マウントするディレクトリを作成...

Vue ページ スタック マネージャーの詳細

目次2. 試した方法2.1 キープアライブ2.2 ネストされたルートを持つ CSS 3. 機能説明4...

Dockerfile を使用して Node.js サービスをデプロイする方法

Dockerfileを初期化するプロジェクトの名前が express であると仮定して、expres...

HTML ヘッド構造

以下では、よく使われるヘッド構造と、各タグや要素の意味や使用シーンを紹介します(この記事は、Yisi...

VMware ESXi6.7 の簡単なセットアップ(画像とテキスト付き)

1. VMware vSphere の概要VMware vSphere は、業界をリードする最も信...

CSSブロッキングマージとその他の効果についての簡単な説明

非直交マージンマージンを使用するとマージが発生します次のプロパティはマージンの結合を防止します。国境...

Ubuntu20のtzselect設定時間失敗問題、Raspberry Piサーバ(推奨)

2 日前、Raspberry Pi サーバーを Ubuntu 20 にアップグレードしました。今日...

CSS3で線形グラデーションを実装するためのコードの詳細な説明

序文デモでは古いバージョンのブラウザのグラデーションが実装されています[IE9-]。 IE9 より前...

Nginx コンパイル済み nginx - 新しいモジュールを追加

1. 既存のモジュールを表示する nginx の sbin ディレクトリに nginx の sbin...

MySQL 8.0.15 で MGR シングル マスターと複数スレーブを構成する方法

1. はじめにMySQL グループ レプリケーション (略して MGR) は文字通り MySQL グ...

Windows で MySQL のルート パスワードをリセットする方法

今日、WordPress がデータベースに接続できないことがわかりました。ウィンドウ サーバーにログ...

Linux で boost.python を使用して C++ 動的ライブラリを呼び出す方法

序文最近、C++ 動的ライブラリをテストするためにロボット フレームワークを使い始めました。ロボット...

Nginx 書き換えジャンプの適用シナリオの詳細な説明

アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...

HTML内の画像はbase64でエンコードされた文字列に直接置き換えられます

最近、画像はあるのに外部画像リソースが参照されていないウェブページを見つけました。気になりました。コ...