Page React 元件
Framework7 中的 Page 與您在思考網頁時所指的意義相同。Page 是用來顯示和操作內容的主要元件。
Page React 元件代表 Framework7 的 Page。
Page 元件
包含以下元件
Page
- 主要頁面元素PageContent
- 額外的內部頁面內容元素
Page 屬性
屬性 | 類型 | 預設值 | 說明 |
---|---|---|---|
<Page> 屬性 | |||
name | 字串 | 頁面名稱 | |
messagesContent | 布林值 | 如果你在裡面使用 訊息 元件,請啟用以新增必要的額外樣式 | |
pageContent | 布林值 | true | 啟用時會自動在裡面新增 page-content 元素。當你需要為分頁使用幾個 page-content 元素時,禁用此功能會很有用 |
tabs | 布林值 | 如果你使用 Page 作為 分頁 包裝器,請啟用 | |
loginScreen | 布林值 | 如果你在頁面內使用 登入畫面,請啟用以新增必要的額外樣式 | |
noSwipeback | 布林值 | 停用當前頁面的滑動返回功能(僅影響 iOS 主題) | |
withSubnavbar | 布林值 | 如果你在頁面內有次要導覽列,請啟用 | |
noNavbar | 布林值 | 如果你使用常見的導覽列版面,並且需要針對此頁面隱藏常見的導覽列(或使用其他導覽列),請啟用(僅影響 iOS 主題) | |
noToolbar | 布林值 | 如果你使用常見的工具列/分頁列版面,並且需要針對此頁面隱藏工具列(或使用其他工具列),請啟用 | |
hideBarsOnScroll | 布林值 | 在頁面捲動時隱藏導覽列和工具列 | |
hideNavbarOnScroll | 布林值 | 在頁面捲動時隱藏導覽列 | |
hideToolbarOnScroll | 布林值 | 在頁面捲動時隱藏工具列 | |
ptr | 布林值 | 啟用 下拉更新 | |
ptrDistance | 數字 | 自訂下拉更新觸發距離。預設值(如果未指定)為 44px。 | |
ptrPreloader | 布林值 | true | 如果你想使用自訂下拉更新預載元件,請停用 |
ptrBottom | 布林值 | false | 啟用從底部下拉更新 |
ptrMousewheel | 布林值 | false | 啟用使用滑鼠滾輪下拉更新(適用於桌面應用程式)。僅適用於 PTR 頂部 |
infinite | 布林值 | 啟用 無限捲動 | |
infiniteTop | 布林值 | 在頁面頂部啟用無限捲動 | |
infiniteDistance | 數字 | 從頁面底部(以像素為單位)觸發無限捲動事件的距離。預設值(如果未指定)為 50(像素) | |
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 | 開始移動下拉更新內容時觸發事件 |
ptrPullMove | 移動下拉更新內容時觸發事件 |
ptrPullEnd | 釋放下拉更新內容時觸發事件 |
ptrRefresh | 下拉更新進入「更新中」狀態時觸發事件 |
ptrDone | 下拉更新完成並回到初始狀態(呼叫 pullToRefreshDone 方法後)觸發事件 |
infinite | 頁面捲動到達指定(在 data-distance 屬性中)距離底部時觸發事件。 |
<PageContent> 事件 | |
tabShow | 標籤可見/啟用時觸發事件 |
tabHide | 標籤隱藏/停用時觸發事件 |
ptrPullStart ptrPullMove ptrPullEnd ptrRefresh ptrDone infinite | 與 <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>
);
};
下拉更新
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>
);
};