ページReactコンポーネント
Framework7のPageは、Webページを考えるときと同じ意味を持っています。Pageはコンテンツを表示・操作するためのメインコンポーネントです。
Page Reactコンポーネントは、Framework7のPageを表しています。
ページのコンポーネント
以下のコンポーネントが含まれています。
Page
- メインのページ要素PageContent
- 追加のインナーページコンテンツ要素
ページのプロパティ
Prop | Type | Default | Description |
---|---|---|---|
<Page> properties | |||
name | string | ページ名 | |
stacked | boolean | すべてのページをDOM内に保持するstackedPages Routerパラメータを使用すると、現在アクティブでないページに対して有効になります。 | |
messagesContent | boolean | Messagesコンポーネントを使用して、必要な追加スタイリングを追加する場合に有効です。 | |
pageContent | boolean | true | 有効にすると、内部に page-content 要素が自動的に追加されます。タブ用の page-content 要素が少ない場合は無効にするのが便利です。 |
tabs | boolean | ページを Tabs のラッパーとして使用している場合に有効にします。 | |
loginScreen | boolean | ページ内で ログイン画面 を使用して必要なスタイルを追加する場合に有効にする | |
noSwipeback | boolean | 現在のページのスワイプバック機能を無効にする(iOSテーマのみに適用されます | |
withSubnavbar | boolean | ページ内にSub Navbarがある場合に有効にする | |
noNavbar | boolean | 共通のナビバーレイアウトを使用していて、このページで共通のナビバーを隠す(または別のものを使用する)必要がある場合に有効にする(iOSテーマにのみ影響します)。 | |
noToolbar | boolean | 一般的なツールバー/タブバーのレイアウトを使用していて、このページでツールバーを隠す必要がある場合に有効にする(または別のものを使用する | |
hideBarsOnScroll | boolean | ページスクロール時にナビバーとツールバーを隠す | |
hideNavbarOnScroll | boolean | ページスクロール時にナビバーを隠す | |
hideToolbarOnScroll | boolean | ページ スクロール時にツールバーを隠す | |
ptr | boolean | Pull To Refreshを有効にします。 | |
ptrDistance | number | カスタムの更新時のトリガーの距離を指定します。デフォルトでは(指定されていない場合)、44pxです。 | |
ptrPreloader | boolean | true | カスタム・プル・トゥ・リフレッシュ・プリローダー要素を使用したい場合は無効にしてください。 |
ptrBottom | boolean | false | 下からの更新を有効にする |
ptrMousewheel | boolean | false | マウスホイールでの更新を有効にする(デスクトップアプリの場合)。PTRトップでのみ動作します。 |
infinite | boolean | Infinite Scrollを有効にする | |
infiniteTop | boolean | ページ上部の無限スクロールを有効にする | |
infiniteDistance | number | 無限スクロールイベントを発生させるためのページ下部からの距離(px)を指定します。デフォルトでは(指定されていない場合)、50(px)です。 | |
infinitePreloader | boolean | true | カスタム無限スクロール・プリローダーを使用する場合は無効にします。 |
<PageContent> properties | |||
tab | boolean | page-contentをTabとして使用している場合は有効 | |
tabActive | boolean | 現在のタブがアクティブな場合に有効 | |
ptr ptrDistance ptrPreloader ptrBottom ptrMousewheel infinite infiniteTop infiniteDistance infinitePreloader hideBarsOnScroll hideNavbarOnScroll hideToolbarOnScroll messagesContent loginScreen | <ページ>`のプロパティと同じです。 |
ページイベント
Event | Description |
---|---|
<Page> events | |
pageMounted | keepAlive` ルートを持つページがDOMにマウント/アタッチされると、イベントが発生します。 |
pageInit | Framework7が必要なページのコンポーネントとナビバーを初期化した後にイベントが発生します。 |
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>
);
};