Runtime API

在主题开发的过程中,我们一般需要如下的一些关键 API 来获取页面的数据或者状态:

usePageData

用户获取页面所有数据的 Hook,比如:

tsx
import { usePageData } from 'islandjs/runtime';

function Layout() {
  const pageData = usePageData();
  return <div>{pageData.title}</div>;
}

usePageData 类型如下:

ts
const usePageData: () => PageData;

PageData 的类型如下:

ts
export interface PageData {
  // 站点通用信息,包含主题配置 themeConfig 信息
  siteData: SiteData;
  // 上次更新时间
  lastUpdatedTime?: string;
  // 页面标题
  title?: string;
  // 页面描述
  description?: string;
  // Front Matter 元数据
  frontmatter?: FrontMatterMeta;
  // 页面类型
  pageType: PageType;
  // TOC 数据,包含标题和对应的锚点
  toc?: Header[];
  // 当前路由路径
  routePath: string;
  // 页面的路径,去掉 query 和 hash
  pagePath: string;
  // 页面的正文内容
  content?: string;
}

基于此 API,你基本可以获取到需要的所有数据。

Content

获取正文 MDX 组件内容,即正文内容:

ts
import { Content } from 'islandjs/runtime';

function Layout() {
  return (
    <div>
      <Content />
    </div>
  );
}

路由 Hook

Island.js 内部用 react-router-dom 来实现路由,所以你可以直接使用 react-router-dom 的 Hook,比如:

ts
import { useLocation } from 'islandjs/runtime';

function Layout() {
  const location = useLocation();
  return <div>Current location: {location.pathname}</div>;
}