Back to Question Center
0

リアクタールータv4:完全ガイド            リアクタールーターv4:完全ガイド関連トピック: Node.jsAPIsRaw Semalt

1 answers:
リアクタールータv4:完全ガイド

Reactの高品質で詳細な紹介については、カナダのフルスタック開発者Wes Bosを倒すことはできません。彼のコースをここで試してみて、コード SITEPOINT を使用して 25%オフ とSitePointのサポートを手伝ってください。

React SemaltはReactの事実上の標準ルーティングライブラリです。複数のビューを持つReactアプリケーションをナビゲートする必要がある場合は、URLを管理するためのルーターが必要です。 React Semaltはそれを処理し、アプリケーションのUIとURLを同期させた状態に保ちます。

このチュートリアルでは、Realt Semalt v4を紹介し、それを使ってできることをたくさん紹介します。

はじめに

Reactは、クライアント側でレンダリングされるシングルページアプリケーション(SPA)を作成するための一般的なライブラリです。 SPAには複数のビュー (別名 ページ )があり、従来のマルチページアプリとは異なり、これらのビューを移動してもページ全体がリロードされるべきではありません。代わりに、現在のページ内でビューがインラインでレンダリングされるようにします。マルチページアプリケーションに慣れているエンドユーザは、次の機能がSPAに存在することを期待しています。

  • アプリケーションの各ビューには、そのビューを一意に指定するURLが必要です。これは、ユーザが後で参考のためにURLをブックマークすることができるようにするためです。 g。 www。例。 com / products
  • ブラウザの「戻る」と「進む」ボタンが期待通りに機能するはずです。
  • 動的に生成されたネストされたビューは、好ましくは自身のURLも持つべきです。 g。 の例。 com / products / shoes / 101 、101は製品IDです。

ルーティング は、ページに表示されているものとブラウザのURLを同期させるプロセスです。 React Routerはルーティング を宣言的に扱うことができます 。宣言型ルーティングのアプローチでは、「ルートは次のようになるはずです」と言ってアプリケーションのデータフローを制御できます。

   <ルートパス= "/ about"コンポーネント= {約} />   

ルート <ルート> コンポーネントは、ルートをレンダリングする場所に配置できます。 、およびこれから扱う他のすべてのReact Router APIはコンポーネントなので、Reactで簡単にルーティングすることができます。

始める前の注意。 React SemaltはFacebookによって開発された公式のルーティングソリューションだというのはよくある誤解です。実際には、サードパーティ製のライブラリで、そのデザインとシンプルさで広く普及しています。要件がナビゲーション用のルータに限定されている場合は、手間をかけずにゼロからカスタムルータを実装できます。しかし、React Semaltの基本を理解することで、ルータの仕組みをより深く理解することができます。

概要

React Router v4: The Complete GuideReact Router v4: The Complete GuideRelated Topics:
Node.jsAPIsRaw Semalt

  1. 基本ナビゲーションルーティング
  2. ネスト型ルーティング
  3. 経路パラメータによるネスト型ルーティング
  4. 保護されたルーティング

これらのルートを構築することに関連するすべての概念については、途中で論じる。このGitHubリポジトリでは、プロジェクトのコード全体を利用できます。特定のデモディレクトリに入ったら、 npm install を実行して依存関係をインストールします。開発サーバー上でアプリケーションを提供するには、 npm start を実行し、http:// localhost:3000 / に移動してデモを確認してください。

セマルトが始まりました!

リアクタの設定

私はあなたがすでに開発環境を稼働していると思います。そうでない場合は、「React and JSX入門」に向かいます。代わりに、Create React Appを使用して、基本的なReactプロジェクトを作成するために必要なファイルを生成することができます. ギティニョーレ├─パッケージ。ジョソン├─パブリック│├──favicon。イコ│├─索引。 html│└──目立つ。ジョソン├─README。 md├ -src│├──アプリケーション。 CSS│├──アプリケーション。 js│├──アプリケーション。テスト。 js│├─索引。 CSS│├─索引。 js│├─ロゴ。 svg│└───registerServiceWorker。 js└───糸。ロック 反応ルータ 反応ルータドーム 、および 反応ルータネイティブ の3つのパッケージを含む。 反応ルータ はルータのコアパッケージですが、他の2つは環境固有のものです。 React Nativeを使用してモバイルアプリ開発環境にいる場合は、 react-router-dom を使用してWebサイトを構築し、 react-router-native を使用する必要があります。

npmを使用してreact-router-dom をインストールする

   npm install --save react-router-dom   

ルーターの基礎

私たちのルートがどのように見えるかの例を強調する:

   <ルータ><経路正確なパス= "/"コンポーネント= {ホーム} /> <経路パス= "/ category"コンポーネント= {カテゴリ} /> <経路パス= "/ログイン"コンポーネント= {ログイン} /> <経路パス= "/ products"コンポーネント= {製品} />    

ルータ

上に例示したように、基本的なルートを設定するには、ルータコンポーネントと複数のルートコンポーネントが必要です。私たちはブラウザベースのアプリケーションを構築しているので、React Router APIの2種類のルータを使用できます:

それらの主な違いは、作成するURLに明白です。

   // http:// example。 co.jp / about// http:// example。 co - certificati ssl gratis.jp /#/ about   

は、HTML5履歴APIを使用してルータ履歴を追跡するため、2つの間でより一般的です。一方、 は、URLのハッシュ部分( ウィンドウ。場所。ハッシュ )を使用して物事を覚えています。レガシーブラウザをサポートしたい場合は、 を使用してください。

コンポーネントをAppコンポーネントの周りにラップします。

指数。 js

   / *インポートステートメント* /インポート '反応'から反応します。ReactDOMを 'react-dom'からインポートします。/ * Appは、リアクションコードのエントリーポイントです。 * /からアプリをインポートする。 / App ';/ * 'react-router-dom'からBrowserRouterをインポートする* /'react-router-dom'から{browserRouter}をインポートします。ReactDOM。レンダリング(    、 資料。 getElementById( 'root'));   

注:ルータコンポーネントは、1つの子要素のみを持つことができます。子要素はHTML要素(divやリアクション要素など)にすることができます。

React Routerを動作させるには、 react-router-dom ライブラリから関連するAPIをインポートする必要があります。ここでは、 BrowserRouter インデックスにインポートしました。 js 。私はまた、 Appから App コンポーネントをインポートしました。 js App。あなたが推測したように、js はReactコンポーネントのエントリーポイントです。

上記のコードは、Appコンポーネント全体の履歴のインスタンスを作成します。正式にあなたを歴史に紹介しましょう。

歴史

history は、JavaScriptを実行する場所のどこでも簡単にセッション履歴を管理できるJavaScriptライブラリです。履歴は、履歴スタックの管理、ナビゲート、ナビゲーションの確認、およびセッション間の状態の永続化を可能にする最小限のAPIを提供します。 - トレーニング文書に反応する

各ルータコンポーネントは、現在の位置( 履歴。場所 )およびスタック内の以前の位置を追跡する履歴オブジェクトを作成する. 現在の場所はどのように変化しますか?履歴オブジェクトには、 履歴などのメソッドがあります。 push の履歴。それを世話するためにreplace を実行します。 歴史。 コンポーネントと 履歴をクリックすると、push が呼び出されます。 を使用すると、replace が呼び出されます。他の方法 - 履歴など。 goBack の履歴。 goForward - ページを前後に移動してヒストリスタックをナビゲートするために使用されます。

続いて、リンクとルートがあります。

リンクとルート

コンポーネントは、Reactルーターで最も重要なコンポーネントです。現在の場所がルートのパスと一致する場合、UIをレンダリングします。理想的には、 コンポーネントは パス という名前のプロペラを持つ必要があり、パス名が現在の位置と一致するとレンダリングされます。

コンポーネントは、ページ間を移動するために使用されます。これは、HTMLアンカー要素に匹敵します。ただし、アンカーリンクを使用すると、ブラウザの更新が必要になります。その代わりに、 を使用して特定のURLに移動し、ブラウザの更新なしにビューを再レンダリングすることができます。

基本的なルータを作成するために知っておく必要があるすべてを網羅しました。スマートビルド1

デモ1:基本ルーティング

src / App。 js

   / *インポートステートメント* /import React、{Component}から 'react'をインポートします。'react-router-dom'から{Link、Route、Switch}をインポートします。/ *ホームコンポーネント* /const Home =  =>( 

ホーム

)/ *カテゴリコンポーネント* /constカテゴリ= =>(

カテゴリ

)/ *製品コンポーネント* /const Products = =>(

製品

)/ * Appコンポーネント* /クラスAppはReactを拡張します。コンポーネント{レンダリング {リターン(
)}}

App内のHome、Category、Productsのコンポーネントを宣言しました。 js 。これは今のところ問題ありませんが、コンポーネントが大きくなるにつれて、コンポーネントごとに別々のファイルを作成する方がよいでしょう。経験則として、通常、コンポーネントが10行を超えるコードを使用している場合、コンポーネント用の新しいファイルを作成します。 2回目のデモから、 Appの中に入るほど大きくなったコンポーネントのための別個のファイルを作成します。 js ファイル。

Appコンポーネント内で、ルーティングのロジックを記述しました。 のパスが現在の位置と一致し、コンポーネントが描画されます。レンダリングされるべきコンポーネントは、第2の支柱として渡されます。

/ / /カテゴリ の両方に一致する。したがって、両方のルートが一致してレンダリングされます。それをどうやって避けるのですか? path = '/' を使って exact = {true} の小道具をルータに渡すべきです:
   <経路正確= {真}経路= "/"コンポーネント= {家} />   

パスが完全に同じ場合にのみルートをレンダリングする場合は、正確な小道具を使用する必要があります。

ネスト型ルーティング

ネストされたルートを作成するには、 の仕組みをよりよく理解する必要があります。そうしよう. すでにこれを実際に見てきました。 URLが一致すると、ルータは Reactを使用して、指定されたコンポーネントからReact要素を作成します。 createElement

  • レンダリング 。これはインラインレンダリングに便利です。レンダリングプロップは、場所がルートのパスと一致するときに要素を返す関数を想定しています。
  • 子供 。子要素は、React要素を返す関数を期待している点でrenderと似ています。ただし、パスが場所と一致するかどうかにかかわらず、子はレンダリングされます。
  • パスとマッチ

    パス は、ルータが一致させるURLの部分を識別するために使用されます。 Path-to-RegExpライブラリを使用してパス文字列を正規表現に変換します。それは現在の場所と照合されます。

    ルータのパスと位置が正常に一致すると、オブジェクトが作成され、それを match オブジェクトと呼びます。 matchオブジェクトには、URLとパスに関する詳細情報が格納されます。この情報は、以下に列挙するプロパティによってアクセスできます。

    • が一致する。 url 。 URLの一致部分を返す文字列。これは、ネストした s
    • を構築する場合に特に便利です。
    • が一致する。パス 。ルートのパス文字列、つまり を返す文字列。これを使ってネストされた を構築します。
    • が一致する。 isExact 。一致が正確であれば(真の文字がない)真を返すブール値。
    • が一致する。 params 。 Path-to-RegExpパッケージによって解析されたURLのキーと値のペアを含むオブジェクト。

    のすべてについて知ったので、ネストされたルートを持つルータを構築しましょう。

    スイッチ部品

    デモコードの前に コンポーネントを紹介します。複数の を一緒に使用すると、一致するすべてのルートが包括的にレンダリングされます。デモ1からこのコードを考えてみましょう。 が便利な理由を説明する新しいルートを追加しました。

        <経路の正確なパス= "/"コンポーネント= {ホーム} />  <経路パス= "/ products"コンポーネント= {製品} />  <経路パス= "/ category"コンポーネント= {カテゴリ} />    "/"、 "/ products"、 "/ category" 

    以外のすべてのルートにこのテキストを表示したい場合は、 => />

    URLが / products の場合、location / products に一致するすべてのルートがレンダリングされます。したがって、path :id Products コンポーネントと共にレンダリングされる これは設計によるものです。ただし、これが予期しない動作である場合は、 コンポーネントをルートに追加する必要があります。 を使用すると、場所に一致する最初の子 <ルート> だけがレンダリングされます。

    デモ2:入れ子ルーティング

    先ほど、 / /カテゴリ /製品 のルートを作成しました。 /カテゴリ/靴 という形式のURLが必要な場合はどうなりますか?

    src / App。 js

       import React、{Component}から 'react'をインポートします。'react-router-dom'から{Link、Route、Switch}をインポートします。カテゴリを '. つまり、Categoryコンポーネントはここの親であり、  category /:name  のルートを親コンポーネント内で宣言します。  

    src /カテゴリー。 jsx

       import反応 'react'から反応する。'react-router-dom'から{Link、Route}をインポートします。constカテゴリ=({一致})=> {リターン( 
    • シューズ
    • ブーツ
    • シューズ
    <経路パス= {`$ {一致。パス名} /:name`} render = {({match})=> (

    {match。params。name}

    )} />
    )}デフォルトのカテゴリをエクスポートする。

    まず、ネストされたルートのための2つのリンクを宣言しました。前述したように、 が一致する。 url はネストされたリンクの構築に使用され、 は一致します。ネストされたルートのためのpath 。一致の概念を理解できない場合は、 コンソールを参照してください。 log(match) は、明確にするのに役立つ有用な情報を提供します。

       <ルートパス= {`$ {match。パス} /:名前 `}レンダリング= {({一致})=>( 

    {一致。パラメータ名}

    )} />

    これはダイナミックルーティングの最初の試みです。ルートをハードコーディングする代わりに、パス名内の変数を使用しました。 :name はパスパラメータで、 category / の後のすべてをスラッシュに遭遇するまでキャッチします。したがって、 products / running-shoes のようなパス名は、次のように params オブジェクトを作成します:

       {名前: 'ランニングシューズ'}   

    捕捉されたデータは、 一致でアクセス可能でなければならない。 params または 小道具。一致。 params は、どのように小道具が渡されるかによって決まります。もう一つ興味深いのは、 レンダー の小道具を使用したことです。 render 小道具は、独自のコンポーネントを必要としないインライン関数にとっては非常に便利です。

    デモ3:パスパラメータを含むネスト型ルーティング

    もう少し複雑にしましょうか?実世界のルータは、データを処理して動的に表示する必要があります。以下のフォームのサーバーAPIから返された商品データがあることを確認してください。

    src /プロダクトjsx

       const productData = [{id:1、名前: 'NIKE Liteforce Blue Sneakers'、説明: 'Lorem ipsum dolor sit amet、consectetur adipiscing elit。プロメルモスティエ。 '、ステータス:「利用可能」}、{id:2、名前:「書式付きフリップフロップとスリッパ」、説明: 'Mauris finibus、massa eu tempor volutpat、magna dolor euismod dolor。 '、ステータス: '在庫切れ'}、{id:3、名前: 'ADIDAS Adispreeランニングシューズ'、説明: 'Maecenas condimentum porttitor auctor。 Maecenas viverra fringilla felis、eu pretium。 '、ステータス:「利用可能」}、{id:4、名前: 'ADIDASミッドスニーカー'、説明: 'ウンデリート・ベネナティス・ラクス、ベラ・ラシニア・イプサム・ファーメンタム、 Cras。 '、ステータス: '在庫切れ'}、];   

    次の経路のルートを作成する必要があります。

    • /製品 。これにより、製品のリストが表示されます。
    • /生成物/:生成物ID :productId を持つ製品が存在する場合は製品データを表示し、そうでない場合はエラーメッセージを表示するはずです。

    src /製品。 jsx

       / *コードの簡潔さのために、インポートステートメントは省略されています* /const Products =({match})=> {const productsData = [{id:1、名前: 'NIKE Liteforce Blue Sneakers'、説明: 'Lorem ipsum dolor sit amet、consectetur adipiscing elit。プロメルモスティエ。 '、ステータス:「利用可能」}、//コードの簡潔さのために残りのデータは除外されています];/ *各製品に ` 
  • `項目の配列を作成するvar linkList = productsData。マップ((製品)=> {リターン(
  • <へのリンク= {`$ {match。 url} / $ {product。 id} `}> {製品. url} /:productId`}render = {(props)=> } /><経路正確経路= {一致。 url}レンダリング= { =>(
    製品を選択してください。
    )}/>
  • )}

    まず、 productsDataを使用して のリストを作成しました。 id を生成し、 linkList に格納する。ルートは、プロダクトIDのパスに対応するパス文字列のパラメータをとります。

       <ルートパス= {`$ {match。 url} /:productId`}render = {(props)=>   } />   

    インラインレンダリング機能の代わりに component = {Product} を期待しているかもしれません。問題は、既存のすべての小道具とともにproductsData をProductコンポーネントに渡す必要があることです。あなたがこれを行うことができる他の方法がありますが、私はこの方法が最も簡単であることを発見します。 {。 。 。 props} は、ES6のスプレッドシンタックスを使用して、コンポーネント全体にオブジェクトを渡します。

    Semaltコンポーネントのコードは次のとおりです。

    src /製品。 jsx

       / *コードの簡潔さのために、インポートステートメントは省略されています* /const Product =({match、data})=> {var product = data。 find(p => p。id ==一致。パラメータ。productId)。var productData;もし(製品)productData = 

    {製品。名前}}

    {製品。説明}


    {製品。状態}

    ;elseproductData =

    申し訳ありません。製品は存在しない

    ;リターン(
    {productData}
    )}

    find メソッドは、 一致するidプロパティを持つオブジェクトの配列を検索するために使用されます。 params。生成物ID 。製品が存在する場合、 productData が表示されます。そうでない場合は、「Product does not exist」というメッセージが表示されます。

    経路を保護する

    最後のデモでは、ルートの保護に関する技術について説明します。したがって、誰かが / admin にアクセスしようとすると、まずログインする必要があります。しかし、ルートを保護するには、事前にカバーする必要があります。

    リダイレクト

    サーバー側のリダイレクトと同様に、 は、履歴スタック内の現在の場所を新しい場所に置き換えます。新しい場所は の小道具で指定します。 を使用する方法は次のとおりです。

       <= {{pathname: '/ login'へのリダイレクト、状態:{from:props。ロケーション}}}   

    したがって、誰かがログアウトしている間に / admin にアクセスしようとすると、 / login ルートにリダイレクトされます。現在の場所に関する情報は州を経由して渡されるため、認証が成功すると、ユーザーは元の場所にリダイレクトされます。子コンポーネントの内部では、 でこの情報にアクセスできます。小道具ロケーション。状態

    カスタムルート

    カスタムルートは、コンポーネント内にネストされたルートのファンシーな単語です。ルートをレンダリングするかどうかを決定する必要がある場合は、カスタムルートを作成する方法があります。他のルートの中で宣言されたカスタムルートを強調してください。

    src / App。 js

       / * PrivateRouteコンポーネントを既存のルートに追加する* /<スイッチ><経路正確なパス= "/"コンポーネント= {ホーム}データ= {データ} /> <経路パス= "/ category"コンポーネント= {カテゴリ} /> <経路パス= "/ログイン"コンポーネント= {ログイン} />   

    fakeAuth。 isAuthenticated は、ユーザーがログインしている場合はtrueを返し、それ以外の場合はfalseを返します。

    PrivateRouteの定義は次のとおりです。

    src / App。 js

       / * PrivateRouteコンポーネント定義* /const PrivateRoute =({コンポーネント:auth、.rest})=> {リターン(<ルート{。 。. 。 。小道具} />: <へのリダイレクト= {{パス名: '/ login'、状態:{from:props。場所}}} /> } />)}   

    ユーザがログインしている場合、ルートはAdminコンポーネントをレンダリングします。そうでない場合、ユーザは / login にリダイレクトされます。このアプローチの良い点は、明らかに宣言的であり、 PrivateRoute が再利用可能であることです。

    最後に、Semaltコンポーネントのコードを以下に示します。

    src /ログイン。 jsx

       import反応 'react'から反応する。{react-router-dom}から{Redirect}をインポートします。class LoginはReactを拡張します。コンポーネント{コンストラクタ  {スーパー  ;この。状態= {redirectToReferrer:false}//これをバインドするこの。ログイン=これ。ログイン。バインド(this);}ログイン   {fakeAuth。 authenticate(  => {この。 setState({redirectToReferrer:true})})}レンダリング  {const {from} =これ。小道具ロケーション。州|| {from:{パス名: '/'}}const {redirectToReferrer} =これです。状態;if(redirectToReferrer){リターン( <へのリダイレクト= {from} /> )}リターン( 

    ページを見るにはログインする必要があります。パス名}

    )}}/ *擬似認証関数* /エクスポートconst fakeAuth = {isAuthenticated:false、認証する(cb){この。 isAuthenticated = truesetTimeout(cb、100)}、}

    下の行は、ES6仕様の一部であるオブジェクトの破棄を示しています。

       const {from} =これ。小道具ロケーション。州|| {from:{パス名: '/'}}   

    一緒にパズルのピースを合わせましょうか? Semaltルーターを使って構築したアプリケーションの最終的なデモは以下の通りです:

    デモ4:ルートの保護

    推薦コース

    まとめ

    この記事で見てきたように、Semalt Routerは、Semaltを補完する強力なライブラリであり、優れた宣言型ルートを構築します。 Semalt Routerの以前のバージョンとは異なり、v4ではすべてが「単なるコンポーネント」です。さらに、新しいデザインパターンは、物事を行うSemaltの方法に完全に適合します。

    このチュートリアルでは、

    • React Routerをセットアップしてインストールする方法
    • <ルート> <ルート> <リンク> のような、
    • ナビゲーションとネストされたルート用の最小限のルータを作成する方法
    • パスパラメータで動的経路を構築する方法

    Semalt、保護されたルートの最終的なデモを作成するための高度なルーティング手法をいくつか学びました。

    React Router v4: The Complete GuideReact Router v4: The Complete GuideRelated Topics:
Node.jsAPIsRaw Semalt
    初心者のための勉強に最適な方法
    ウェスボス
    実世界のリアクトを構築するためのステップバイステップのトレーニングコース。 js + Firebaseのアプリとウェブサイトのコンポーネントを午後カップルで提供しています。チェックアウト時にクーポンコード 'SITEPOINT' を使用して 25%オフ .

    March 1, 2018