React Router4.1
7779 ワード
基本ルーティング構成
すなわち
URL
コンポーネント
/
App
/about
App -> About
/inbox
App -> Inbox
/inbox/messages/:id
App -> Inbox -> Messages
ルーティングには、「1つのURLに一致するかどうか」を決定する3つの属性があります.ネスト関係と そのパス構文 優先度
指定されたURLが呼び出されると、セット全体(ヒットした部分)がレンダリングされます.ネストされたルーティングは、ツリー構造として記述される.React Routerは、指定されたURLに一致するルーティングを探すために、ルーティング構成全体を優先的に巡回します.
ルーティングパスは、URLの1つ(または一部)に一致する文字列モードです.ほとんどのルーティングパスは、以下のいくつかの特殊な記号を除いて、文字通りに直接理解できます.:paramName–該当するセグメントは/、?または#の後のURL.ヒットした部分はパラメータ として使用されます.()–その内部のコンテンツはオプションとみなされます. は、次の文字またはURL全体の末尾にヒットするまで任意の文字(欲張りではない)に一致し、splatパラメータ を作成する.
最後に、ルーティングアルゴリズムは、定義された順序に従ってルーティングを上から下へマッチングします.したがって、2つの兄弟ルーティングノード構成を持っている場合は、前のルーティングが後のルーティングのパスに一致しないことを確認する必要があります.
デフォルトルーティング(IndexRoute)
ホームが最上位レベルのルーティングとして現れるとしても、
React Routerは、routerWillLeaveライフサイクルフックを提供します.これにより、Reactコンポーネントは、発生しているジャンプをブロックしたり、routeを離れる前に return false今回のジャンプをキャンセル returnはプロンプト情報を返し、routeを離れる前にユーザに確認を促す.
このフックはrouteコンポーネントにLifecycle mixinを導入して取り付けることができます
1.ユーザがアプリケーションの'/'ページを開くとき
コンポーネント
ライフサイクル
App
componentDidMount
Home
componentDidMount
Invoice
N/A
Account
N/A
2.ユーザが'/'から'/invoice/123'にジャンプすると
コンポーネント
ライフサイクル
App
Home
Invoice
Account
N/A Appはrouterから新しいprops(children、params、locationなどのデータ)を受信するので、AppはcomponentWillReceivePropsとcomponentDidUpdateの2つのライフサイクルメソッド をトリガする. Homeはレンダリングされないため、 が削除されます. Invoiceは初めて3.ユーザが/invoice/123から/invoice/789 にジャンプすると
コンポーネント
ライフサイクル
App
Home
N/A
Invoice
Account
N/A
すべてのコンポーネントは以前にマウントされていたので、routerからpropsを更新しただけです.4./invoice/789から/accounts/123にジャンプすると
コンポーネント
ライフサイクル
App
Home
N/A
Invoice
Account
<Router>
<Route path="/" component={App}>
<Route path="about" component={About} />
<Route path="inbox" component={Inbox}>
<Route path="messages/:id" component={Message} />
</Route>
</Route>
</Router>
すなわち
URL
コンポーネント
/
App
/about
App -> About
/inbox
App -> Inbox
/inbox/messages/:id
App -> Inbox -> Messages
ルーティングマッチングの原理
ルーティングには、「1つのURLに一致するかどうか」を決定する3つの属性があります.
ネストされた関係
指定されたURLが呼び出されると、セット全体(ヒットした部分)がレンダリングされます.ネストされたルーティングは、ツリー構造として記述される.React Routerは、指定されたURLに一致するルーティングを探すために、ルーティング構成全体を優先的に巡回します.
パス構文
ルーティングパスは、URLの1つ(または一部)に一致する文字列モードです.ほとんどのルーティングパスは、以下のいくつかの特殊な記号を除いて、文字通りに直接理解できます.
優先度
最後に、ルーティングアルゴリズムは、定義された順序に従ってルーティングを上から下へマッチングします.したがって、2つの兄弟ルーティングノード構成を持っている場合は、前のルーティングが後のルーティングのパスに一致しないことを確認する必要があります.
デフォルトルーティング(IndexRoute)とIndexLink
デフォルトルーティング(IndexRoute)
<Router>
<Route path="/" component={App}>
<IndexRoute component={Home}/>
<Route path="accounts" component={Accounts}/>
<Route path="statements" component={Statements}/>
</Route>
</Router>
ホームが最上位レベルのルーティングとして現れるとしても、
IndexRoute
によってデフォルトのルーティングが設定.ジャンプ前の確認
React Routerは、routerWillLeaveライフサイクルフックを提供します.これにより、Reactコンポーネントは、発生しているジャンプをブロックしたり、routeを離れる前に
routerWillLeave
の戻り値をユーザーに提示したりすることができます.このフックはrouteコンポーネントにLifecycle mixinを導入して取り付けることができます
import { Lifecycle } from 'react-router'
const Home = React.createClass({
// Home route ,
// Lifecycle mixin routerWillLeave 。
mixins: [ Lifecycle ],
routerWillLeave(nextLocation) {
if (!this.state.isSaved)
return 'Your work is not saved! Are you sure you want to leave?'
},
// ...
})
ルーティングライフサイクル
1.ユーザがアプリケーションの'/'ページを開くとき
コンポーネント
ライフサイクル
App
componentDidMount
Home
componentDidMount
Invoice
N/A
Account
N/A
2.ユーザが'/'から'/invoice/123'にジャンプすると
コンポーネント
ライフサイクル
App
componentWillReceiveProps
, componentDidUpdate
Home
componentWillUnmount
Invoice
componentDidMount
Account
N/A
コンポーネント
ライフサイクル
App
componentWillReceiveProps
, componentDidUpdate
Home
N/A
Invoice
componentWillReceiveProps
, componentDidUpdate
Account
N/A
すべてのコンポーネントは以前にマウントされていたので、routerからpropsを更新しただけです.4./invoice/789から/accounts/123にジャンプすると
コンポーネント
ライフサイクル
App
componentWillReceiveProps
, componentDidUpdate
Home
N/A
Invoice
componentWillUnmount
Account
componentDidMount