ページ React コンポーネント
Framework7 のページは、ウェブページを想像する際と同じ意味を持ちます。ページはコンテンツを表示および操作するための主要なコンポーネントです。
Page React コンポーネントは、Framework7 の ページ を表します。
ページコンポーネント
次のコンポーネントが含まれています。
Page
- メインページ要素PageContent
- 追加の内部ページコンテンツ要素
ページプロパティ
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
<Page> プロパティ | |||
name | 文字列 | ページ名 | |
messagesContent | ブール値 | メッセージ コンポーネントを内部で使用して必要な追加のスタイルを追加する場合に有効にします。 | |
pageContent | ブール値 | true | 有効にすると、自動的にpage-content 要素が内部に追加されます。タブにいくつかの page-content 要素を使用する必要がある場合に無効にするのに役立ちます。 |
tabs | ブール値 | ページを タブ ラッパーとして使用する場合に有効にします。 | |
loginScreen | ブール値 | ページ内に ログイン画面 を使用して必要な追加のスタイルを追加する場合に有効にします。 | |
noSwipeback | ブール値 | 現在のページのスワイプバック機能を無効にします(iOS テーマのみに影響します)。 | |
withSubnavbar | ブール値 | ページ内にサブナビゲーションバーがある場合に有効にします。 | |
noNavbar | ブール値 | 共通のナビゲーションバーレイアウトを使用し、このページの共通のナビゲーションバーを非表示にする必要がある場合に有効にします(iOS テーマのみに影響します)。 | |
noToolbar | ブール値 | 共通のツールバー/タブバーレイアウトを使用し、このページのツールバーを非表示にする必要がある場合に有効にします。 | |
hideBarsOnScroll | ブール値 | ページスクロール時にナビゲーションバーとツールバーを非表示にします。 | |
hideNavbarOnScroll | ブール値 | ページスクロール時にナビゲーションバーを非表示にします。 | |
hideToolbarOnScroll | ブール値 | ページスクロール時にツールバーを非表示にします。 | |
ptr | ブール値 | プルToRefresh を有効にします。 | |
ptrDistance | 数値 | プルToRefresh トリガーの距離をカスタマイズします。デフォルト(指定されていない場合)は 44px です。 | |
ptrPreloader | ブール値 | true | カスタムのプルToRefresh プリローダー要素を使用する場合は無効にします。 |
ptrBottom | ブール値 | false | 下部からのプルToRefresh を有効にします。 |
ptrMousewheel | ブール値 | false | マウスホイールによるプルToRefresh を有効にします(デスクトップアプリ用)。PTR 上部でのみ機能します。 |
infinite | ブール値 | 無限スクロール を有効にします。 | |
infiniteTop | ブール値 | ページの上部で無限スクロールを有効にします。 | |
infiniteDistance | 数値 | 無限スクロールイベントをトリガーするページ下部からの距離(px)。デフォルト(指定されていない場合)は 50(px)です。 | |
infinitePreloader | ブール値 | true | カスタムの無限スクロールプリローダーを使用する場合は無効にします。 |
<PageContent> プロパティ | |||
tab | ブール値 | page-content をタブとして使用する場合は有効にします。 | |
tabActive | ブール値 | 現在のタブがアクティブな場合に有効にします。 | |
ptr ptrDistance ptrPreloader ptrBottom ptrMousewheel infinite infiniteTop infiniteDistance infinitePreloader hideBarsOnScroll hideNavbarOnScroll hideToolbarOnScroll messagesContent loginScreen | <Page> プロパティと同じです。 |
ページイベント
イベント | 説明 |
---|---|
<Page> イベント | |
pageMounted | keepAlive ルートを持つページが DOM にマウント/アタッチされたときにトリガーされます。 |
pageInit | Framework7 が必要なページのコンポーネントとナビゲーションバーを初期化した後にトリガーされます。 |
pageReinit | 既に初期化されているページに移動した場合にトリガーされます。 |
pageBeforeIn | すべてが初期化され、ページがビューに遷移する準備ができたときに(アクティブ/現在の位置に)トリガーされます。 |
pageAfterIn | ページがビューに遷移した後にトリガーされます。 |
pageBeforeOut | ページがビューから遷移する直前にトリガーされます。 |
pageAfterOut | ページがビューから遷移した後にトリガーされます。 |
pageBeforeUnmount | keepAlive ルートを持つページが DOM からアンマウント/デタッチされる直前にトリガーされます。 |
pageBeforeRemove | ページが DOM から削除される直前にトリガーされます。イベントをデタッチしたり、プラグインを破棄してメモリを解放する必要がある場合に非常に役立ちます。このイベントは、keepAlive ルートではトリガーされません。 |
pageTabShow | ページの親 タブとしてのビュー が表示されたときにトリガーされます。 |
pageTabHide | ページの親 タブとしてのビュー が非表示になったときにトリガーされます。 |
ptrPullStart | プルToRefresh コンテンツの移動を開始したときにトリガーされます。 |
ptrPullMove | プルToRefresh コンテンツを移動中にトリガーされます。 |
ptrPullEnd | プルToRefresh コンテンツを離したときにトリガーされます。 |
ptrRefresh | プルToRefresh が「更新中」状態になったときにトリガーされます。 |
ptrDone | プルToRefresh が完了し、初期状態に戻ったときにトリガーされます(pullToRefreshDone メソッドを呼び出した後)。 |
infinite | ページスクロールが(data-distance 属性で指定された)下部からの距離に達したときにトリガーされます。 |
<PageContent> イベント | |
tabShow | タブが表示/アクティブになったときにトリガーされます。 |
tabHide | タブが非表示/非アクティブになったときにトリガーされます。 |
ptrPullStart ptrPullMove ptrPullEnd ptrRefresh ptrDone infinite | <Page> イベントと同じです。 |
ページスロット
Page React コンポーネント(<Page>
)には、カスタム要素用の追加のスロットがあります。
default
- 要素は、page-content
プロパティが有効になっている場合(デフォルト)、"page-content" の子として挿入されます。fixed
- 要素は、"page-content" の直前に "page" の直接の子として挿入されます。
<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.jsx
import React, { useRef, useState } from 'react';
import { Navbar, Page, 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"></Navbar>
<BlockTitle>Scroll bottom</BlockTitle>
<List strongIos outlineIos dividersIos>
{items.map((item, index) => (
<ListItem title={`Item ${item}`} key={index}></ListItem>
))}
</List>
</Page>
);
};
プルToRefresh
pull-to-refresh.jsx
import React, { useState } from 'react';
import { Navbar, Page, 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 strongIos dividersIos outlineIos>
{items.map((item, index) => (
<ListItem key={index} title={item.title} subtitle={item.author}>
<img slot="media" src={item.cover} width="44" style={{ borderRadius: '8px' }} />
</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>
);
};