OriaTheme
外观

应用开发者

React 与 Next.js

使用 Provider 和 Hooks 订阅同一个 Runtime;Next 将默认 CSS 与 Bootstrap 放在首屏 HTML 中。

挂载一个 Provider

tsx
import { OriaThemeProvider } from "@oriatheme/react";
import { oriaPresetThemes } from "@oriatheme/presets";

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <OriaThemeProvider config={{
      presets: oriaPresetThemes,
      defaultThemeId: "oria-default",
    }}>
      {children}
    </OriaThemeProvider>
  );
}

从 Hook 读取快照并改变偏好

tsx
import { useOriaTheme, useThemeSnapshot } from "@oriatheme/react";

export function ThemeControls() {
  const { setAppearance, setTheme } = useOriaTheme();
  const activeId = useThemeSnapshot((snapshot) => snapshot.preference.activeThemeId);

  return <button onClick={() => setTheme(activeId === "oria-ocean" ? "oria-default" : "oria-ocean")}>
    Switch theme
  </button>;
}

useThemeSnapshot 适合订阅一个稳定切片;不要在组件内重建 Runtime 或复制其状态。

Next.js:首屏与按需编辑器

在 Server Component 的 head 中输出受信任默认 CSS 和 Bootstrap script;将 Provider 放入 Client Component。关闭状态的本地 ThemeEditor 用 dynamic(..., { ssr: false }) 加载,并只在用户打开后渲染。

继续:Vue 集成