4

は、ルータ、スイッチコンポーネントがマッチリアクト反応するルータのドキュメント<a href="https://reacttraining.com/react-router/web/api/Switch" rel="nofollow noreferrer">here</a>それが言うには

は、このコードを検討:URLは、その後、<User><About>​​ある場合

<Route path="/about" component={About}/> 
<Route path="/:user" component={User}/> 
<Route component={NoMatch}/> 

をし、 <NoMatch>はすべてパスに一致するためすべてレンダリングされます。

どのようにすべてがパス​​と一致しますか?ユーザーがユーザー名aboutを持っていない限り、なぜこのことが当てはまるのかわかりません。私は何が欠けていますか?

答えて

4

ライン

<Route path="/:user" component={User}/> 

/後のすべてがcomponentthis.props.params.user変数に渡されるとUserコンポーネントがレンダリングされることを意味しています。

与えられたpathのパターンがpath=パターンと一致する場合にのみマッチングルールが適用されますが、リソースが実際に存在するかどうかは関係ありません。/で始まるパスを取得し、変数の後ろにテキストがある場合、テキストは、ルートパラメータuserUserコンポーネントがレンダリングされ、それだけのテキストとして解析されます。だから、this.props.params.userはこの場合「約」の値を持ちますが、そのような名前が見つからない場合はどのように表示しますか?

通常、一度にすべてのパターンを一致させるパターンが多い場合は、<Switch>コンポーネントを使用して最初の一致のみが実際にレンダリングされるようにしていると思います。

A)

とパスが​​で、ルール

<Route path="/about" component={About}/> 

が一致になるだろうとAbout成分がレンダリングになるだろうし、それ以上の評価は行われていない:<Switch>を使用した場合。

B)パスが/somethingある場合、ルール

<Route path="/about" component={About}/> 

は一致し得ないが、ルール:

<Route path="/:user" component={User}/> 

が一致になるだろう、とUser成分はsomethingでレンダリングされますthis.props.params.user paramと評価されていません。

C)パスは、ルール

<Route path="/about" component={About}/> 
<Route path="/:user" component={User}/> 

が意志とNoMatch成分がレンダリングになるだろう一致しかし

<Route component={NoMatch}/> 

取得されません/場合。逆に

<Switch>を使用していない、あなたのパスが​​の場合:このルールは、パスが​​に等しいすべてのルートと一致するため

<Route path="/about" component={About}/> 

は、マッチになるだろう。この規則は、/で始まり、テキスト、次があるすべてのルートと一致するため

<Route path="/:user" component={User}/> 

もマッチになるだろう。

<Route component={NoMatch}/> 

このルールはパスをまったく気にしないので一致しますが、常に一致します。

0

要素は<switch>...</switch>要素に含まれていないため、すべて評価され、独立して評価されます。

ルータには、システム内のユーザについての知識がありません。パス内で一致する文字列のみを検索します。

のような何か:

if (path === '/about') { return 'About' } 
if (typeof path === 'String') { return 'User' } 
if (true) { return 'noMatch' } 
関連する問題