質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ECMAScript

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

3234閲覧

React RouterでのSwitchタグ内のkeyについて

tojima

総合スコア16

ECMAScript

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2019/09/14 07:00

React

1 <Switch key={this.props.location.key}> 2 <Route exact path="/todos" component={TodosDashBoard} /> 3 <Route path={['/createTodo', '/manage/:id']} component={TodoForm} /> 4 </Switch>

Todoコンポーネントは/createTodoと/manage/:idのURLで表示されるようにしています。

今回、/createTodoからアクセスした場合、新しいインスタンスを作成したいと思い調べたところ、Switch内にkeyを用いることで実装できました。

Switchのkeyでなぜ新しいインスタンスが作成されるのでしょうか?

参考にしたサイト(https://developer.mozilla.org/en-US/docs/Web/API/Location)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

keyが変わったことによってSwitchコンポーネント以下が再レンダリングされたためです。
再レンダリングされると新しいインスタンスが生成されます。

例えば/todoから/createTodoに画面が遷移したとすると

  1. this.props.location.keyが別の値に変化
  2. Switchkeypropsに与える値が変化
  3. Switchコンポーネントが再レンダリング
  4. Routeコンポーネントが再レンダリング
  5. Routeコンポーネントのcomponentpropsに渡されたTodosDashBoard, TodoFormのインスタンスが再生成
  6. URLのpathが変わったのでTodoFormを画面に表示

一方,keyを与えていない場合は以下のようになります。

  1. this.props.location.keyが別の値に変化
  2. Switchコンポーネントはそのまま
  3. Routeコンポーネントもそのまま
  4. URLのpathが変わったのでTodoFormを画面に表示

参考:https://ja.reactjs.org/docs/lists-and-keys.html#keys

投稿2019/09/14 09:33

TetsuyaNegishi

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問