ページReactコンポーネント

    Framework7のPageは、Webページを考えるときと同じ意味を持っています。Pageはコンテンツを表示・操作するためのメインコンポーネントです。

    Page Reactコンポーネントは、Framework7のPageを表しています。

    ページのコンポーネント

    以下のコンポーネントが含まれています。

    • Page - メインのページ要素
    • PageContent - 追加のインナーページコンテンツ要素

    ページのプロパティ

    PropTypeDefaultDescription
    <Page> properties
    namestringページ名
    stackedbooleanすべてのページをDOM内に保持するstackedPages Routerパラメータを使用すると、現在アクティブでないページに対して有効になります。
    messagesContentbooleanMessagesコンポーネントを使用して、必要な追加スタイリングを追加する場合に有効です。
    pageContentbooleantrue有効にすると、内部に page-content 要素が自動的に追加されます。タブ用の page-content 要素が少ない場合は無効にするのが便利です。
    tabsbooleanページを Tabs のラッパーとして使用している場合に有効にします。
    loginScreenbooleanページ内で ログイン画面 を使用して必要なスタイルを追加する場合に有効にする
    noSwipebackboolean現在のページのスワイプバック機能を無効にする(iOSテーマのみに適用されます
    withSubnavbarbooleanページ内にSub Navbarがある場合に有効にする
    noNavbarboolean共通のナビバーレイアウトを使用していて、このページで共通のナビバーを隠す(または別のものを使用する)必要がある場合に有効にする(iOSテーマにのみ影響します)。
    noToolbarboolean一般的なツールバー/タブバーのレイアウトを使用していて、このページでツールバーを隠す必要がある場合に有効にする(または別のものを使用する
    hideBarsOnScrollbooleanページスクロール時にナビバーとツールバーを隠す
    hideNavbarOnScrollbooleanページスクロール時にナビバーを隠す
    hideToolbarOnScrollbooleanページ スクロール時にツールバーを隠す
    ptrbooleanPull To Refreshを有効にします。
    ptrDistancenumberカスタムの更新時のトリガーの距離を指定します。デフォルトでは(指定されていない場合)、44pxです。
    ptrPreloaderbooleantrueカスタム・プル・トゥ・リフレッシュ・プリローダー要素を使用したい場合は無効にしてください。
    ptrBottombooleanfalse下からの更新を有効にする
    ptrMousewheelbooleanfalseマウスホイールでの更新を有効にする(デスクトップアプリの場合)。PTRトップでのみ動作します。
    infinitebooleanInfinite Scrollを有効にする
    infiniteTopbooleanページ上部の無限スクロールを有効にする
    infiniteDistancenumber無限スクロールイベントを発生させるためのページ下部からの距離(px)を指定します。デフォルトでは(指定されていない場合)、50(px)です。
    infinitePreloaderbooleantrueカスタム無限スクロール・プリローダーを使用する場合は無効にします。
    <PageContent> properties
    tabbooleanpage-contentをTabとして使用している場合は有効
    tabActiveboolean現在のタブがアクティブな場合に有効
    ptr
    ptrDistance
    ptrPreloader
    ptrBottom
    ptrMousewheel
    infinite
    infiniteTop
    infiniteDistance
    infinitePreloader
    hideBarsOnScroll
    hideNavbarOnScroll
    hideToolbarOnScroll
    messagesContent
    loginScreen
    <ページ>`のプロパティと同じです。

    ページイベント

    EventDescription
    <Page> events
    pageMountedkeepAlive` ルートを持つページがDOMにマウント/アタッチされると、イベントが発生します。
    pageInitFramework7が必要なページのコンポーネントとナビバーを初期化した後にイベントが発生します。
    pageReinitこのイベントは、すでに初期化されたページに移動した場合にトリガーされます。
    pageBeforeIn全てが初期化され、ページがビュー(アクティブ/カレントポジション)に移行できる状態になると、イベントが発生します。
    pageAfterInページが表示に移行した後にイベントが発生します。
    pageBeforeOutイベントは、ページが表示されなくなる直前に発生します。
    pageAfterOutページが表示されなくなった後にイベントが発生する
    pageBeforeUnmountイベントは、keepAlive ルートを持つページが、DOM からアンマウント/デタッチされるときに発生します。
    pageBeforeRemoveイベントは、ページがDOMから削除される直前に発生します。このイベントは、いくつかのイベントを切り離したり、メモリを解放するためにいくつかのプラグインを破棄する必要がある場合に、非常に便利です。このイベントは keepAlive ルートではトリガされません。
    pageTabShowこのイベントは、ページの親である View as Tab が表示されたときに発生します。
    pageTabHideページの親である View as Tab が非表示になると、イベントが発生します。
    ptrPullStartコンテンツを更新するためにプルを動かし始めるとイベントが発生する
    ptrPullMoveコンテンツを更新するためにプルを動かしている間にイベントが発生する
    ptrPullEndコンテンツを更新するためにプルを解除するとイベントが発生する
    ptrRefresh引いて更新したコンテンツが「更新中」になるとイベントが発生する
    ptrDoneイベントは、更新のためのプルが完了し、初期状態に戻った後(pullToRefreshDoneメソッドの呼び出し後)に発生します。
    infiniteページのスクロールが指定された(data-distance属性の)距離に達すると、イベントが発生します。
    <PageContent> events
    tabShowイベントは、Tabが可視/アクティブになったときに発生します。
    tabHideイベントはTabがhidden/inactiveになった時にトリガーされます。
    ptrPullStart
    ptrPullMove
    ptrPullEnd
    ptrEefresh
    ptrDone
    infinite
    ` イベントと同じです。

    ページスロット

    Page Reactコンポーネント(<Page>)には、カスタム要素用の追加スロットがあります。

    • default - page-content プロップが有効な場合、要素は "page-content" の子として挿入されます(デフォルト)。
    • fixed - 要素は "page" の直接の子として、"page-content" の直前に挿入されます。
    <Page>
      <div slot="fixed">Fixed element</div>
      <p>Page content goes here</p>
    </Page>
    
    {/* Renders to: */}
    
    <div class="page">
      <div>Fixed element</div>
      <div class="page-content">
        <p>Page content goes here</p>
      </div>
    </div>

    Infinite Scroll

    import React, { useState, useRef } from 'react';
    import { Page, Navbar, BlockTitle, List, ListItem } from 'framework7-react';
    
    export default () => {
      const allowInfinite = useRef(true);
      const [items, setItems] = useState([
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
      ]);
      const [showPreloader, setShowPreloader] = useState(true);
    
      const loadMore = () => {
        if (!allowInfinite.current) return;
        allowInfinite.current = false;
    
        setTimeout(() => {
          if (items.length >= 200) {
            setShowPreloader(false);
            return;
          }
    
          const itemsLength = items.length;
    
          for (let i = 1; i <= 20; i += 1) {
            items.push(itemsLength + i);
          }
          allowInfinite.current = true;
          setItems([...items]);
        }, 1000);
      };
    
      return (
        
          
        <Page
          infinite
          infiniteDistance={50}
          infinitePreloader={showPreloader}
          onInfinite={loadMore}
        >
          <Navbar title="Infinite Scroll" />
          <BlockTitle>Scroll bottom</BlockTitle>
          <List>
            {items.map((item, index) => (
              <ListItem title={`Item ${item}`} key={index}></ListItem>
            ))}
          </List>
        </Page>
          
        
      );
    };

    Pull To Refresh

    import React, { useState } from 'react';
    import { Page, Navbar, List, ListItem, BlockFooter } from 'framework7-react';
    
    export default () => {
      const songs = ['Yellow Submarine', "Don't Stop Me Now", 'Billie Jean', 'Californication'];
      const authors = ['Beatles', 'Queen', 'Michael Jackson', 'Red Hot Chili Peppers'];
      const [items, setItems] = useState([
        {
          title: 'Yellow Submarine',
          author: 'Beatles',
          cover: 'https://cdn.framework7.io/placeholder/abstract-88x88-1.jpg',
        },
        {
          title: "Don't Stop Me Now",
          author: 'Queen',
          cover: 'https://cdn.framework7.io/placeholder/abstract-88x88-2.jpg',
        },
        {
          title: 'Billie Jean',
          author: 'Michael Jackson',
          cover: 'https://cdn.framework7.io/placeholder/abstract-88x88-3.jpg',
        },
      ]);
      const loadMore = (done) => {
        setTimeout(() => {
          const picURL = `https://cdn.framework7.io/placeholder/abstract-88x88-${
            Math.floor(Math.random() * 10) + 1
          }.jpg`;
          const song = songs[Math.floor(Math.random() * songs.length)];
          const author = authors[Math.floor(Math.random() * authors.length)];
          items.push({
            title: song,
            author,
            cover: picURL,
          });
          setItems([...items]);
    
          done();
        }, 1000);
      };
      return (
        
          
        <Page ptr ptrMousewheel={true} onPtrRefresh={loadMore}>
          <Navbar title="Pull To Refresh"></Navbar>
          <List mediaList>
            {items.map((item, index) => (
              <ListItem key={index} title={item.title} subtitle={item.author}>
                <img slot="media" src={item.cover} width="44" />
              </ListItem>
            ))}
            <BlockFooter>
              <p>
                Just pull page down to let the magic happen.
                <br />
                Note that pull-to-refresh feature is optimised for touch and native scrolling so it
                may not work on desktop browser.
              </p>
            </BlockFooter>
          </List>
        </Page>
          
        
      );
    };