Next.js
Wink 组件是仅限浏览器的自定义元素 — CDN 脚本必须在客户端加载。以下模式涵盖了 App Router(Next.js 13+)和传统的 Pages Router。
@wink/elements npm package 安装并加载带有 TypeScript 类型的 CDN 包。
npm install @wink/elementsApp Router (Next.js 13+)
Section titled “App Router (Next.js 13+)”创建一个客户端组件,调用一次 load(),并在根布局中渲染它:
'use client';import { useEffect } from 'react';import { load } from '@wink/elements';
export function WinkLoader() { useEffect(() => { load({ clientId: process.env.NEXT_PUBLIC_WINK_CLIENT_ID! }); }, []); return null;}import { WinkLoader } from '@/components/WinkLoader';
export default function RootLayout({ children }: { children: React.ReactNode }) { return ( <html lang="en"> <body> <WinkLoader /> {children} </body> </html> );}在任何 客户端组件 中使用 Wink 组件:
'use client';
export default function HotelsPage() { return ( <main> <wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID" /> </main> );}Pages Router
Section titled “Pages Router”在 _app.tsx 中加载一次:
import type { AppProps } from 'next/app';import { useEffect } from 'react';import { load } from '@wink/elements';
export default function App({ Component, pageProps }: AppProps) { useEffect(() => { load({ clientId: process.env.NEXT_PUBLIC_WINK_CLIENT_ID! }); }, []); return <Component {...pageProps} />;}然后在任何页面中使用 Wink 组件:
export default function HotelsPage() { return <wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID" />;}添加到 .env.local:
NEXT_PUBLIC_WINK_CLIENT_ID=your-client-idNEXT_PUBLIC_ 前缀是必须的,用于将变量暴露给浏览器包。
TypeScript 类型
Section titled “TypeScript 类型”添加声明文件,使 TypeScript 能识别 JSX 中的自定义元素名称 — 详见 React 集成页面 中完整的 wink-elements.d.ts 代码片段。