ナビゲーションルーター

Framework7-React は、Framework7 自体に強力で柔軟なルーターが備わっています。そして、それを動作させるには、ルートを指定する必要があります。

Framework7-React の唯一の違いは、React.js ではすでに React コンポーネントでアプリケーションを構成しているため、ページ(React コンポーネント)をルートにマッピングする必要があることです。これは、ルートの `component` プロパティに React コンポーネントを渡すことで実行できます。基本的な例を次に示します。

// App.jsx

// Import pages components
import HomePage from 'home.jsx';
import AboutPage from 'about.jsx';
import LoginPage from 'login.jsx';

/*
  Now we need to map components to routes.
  We need to pass them along with the F7 app parameters to <App> component
*/

const f7params = {
  name: 'My App',
  // specify routes for app
  routes: [
    {
      path: '/',
      component: HomePage,
    },
    {
      path: '/about/',
      component: AboutPage,
    },
    {
      path: '/login/',
      component: LoginPage,
    },
  ],
};

export default () => (
  <App { ...f7params }>
    {/* Current View/Router, initial page will be loaded from home.jsx component */}
    <View main url="/" />
  </App>
)
// home.jsx
export default () => (
  <Page name="home">
    <Navbar title="Home Page" />
    ...
    <Link href="/about/">About Page</Link>
    <Link href="/login/">Login Page</Link>
  </Page>
)
// about.jsx
export default () => (
  <Page name="about">
    <Navbar title="About" />
    {/* Page content */}
    ...
  </Page>
)
// login.jsx
export default () => (
  <Page name="login">
    <Navbar title="Login" />
    {/* Page content */}
    ...
  </Page>
)

すべてのルートオプション、ネストされたルートルーティング可能なタブルーティング可能なモーダルの使用方法については、ルートドキュメント全体を確認してください。

コンポーネントにプロパティを渡す

ルーターによってロードされた React コンポーネントにコンポーネントプロパティを渡すことができます。これを行うには、いくつかの方法があります。

まず、すべてのルートパラメータは、プロパティとしてコンポーネントに自動的に渡されます。例:

// route with params
{
  path: '/blog/:postId/comments/:commentId/',
  component: BlogPost,
}

そのため、`/blog/45/comments/122/` URL でナビゲートすると、次のデータがプロパティに渡されます。

{
  postId: '45',
  commentId: '122',
}

もう1つのオプションは、ルートの `options` にプロパティを指定することです。

{
  path: '/some-page/',
  component: SomeComponent,
  options: {
    props: {
      foo: 'bar',
      bar: true,
    },
  },
}

そして最後に、API でナビゲートするときに、プロパティをルートコンポーネントに動的に渡すことができます。

f7router.navigate('/some-page/', {
  props: {
    foo: 'bar',
    bar: true,
  }
})

非同期遅延コンポーネント

Webpack を使用すると、ページコンポーネントをオンデマンドでロードできます。これは、F7 のルート `asyncComponent` を使用して可能です。例:

{
  path: '/about/',
  asyncComponent: () => import('./pages/about.jsx'),
},

または、より詳細な制御が必要な場合は、`async` ルートを使用します。

{
  path: '/about/',
  async({ resolve }) {
    // dynamic import component; returns promise
    const reactComponent = () => import('./pages/about.jsx');
    // resolve promise
    reactComponent().then((rc) => {
      // resolve with component
      resolve({ component: rc.default })
    });
  } ,
},

ルーター API

ルーターインスタンスにアクセスし、ルーター API を使用するには、コンポーネントの特別な **f7router** コンポーネントプロパティを使用できます。

export default ({ f7router }) => {
  return (
    <Page>
      <Link onClick={() => f7route.navigate('/about/')}>About</Link>
      <Link onClick={() => f7route.back()}>Back</Link>
    </Page>
  )
}

`f7route` および `f7router` コンポーネントプロパティは、ルートに従ってロードするカスタムページコンポーネント内でのみ使用できることに注意してください。親コンポーネント(View 内、または React アプリインスタンスを初期化する場所など)および子コンポーネントでは、アクセスできません。そのため、この場合は、初期化された View インスタンス へのアクセスを使用します。例:`f7.views.main.router`