Remix
Remix là một framework full-stack mặc định render trên server. Tải CDN của Wink chỉ trên client bằng cách sử dụng useEffect trong component gốc.
@wink/elements npm package Cài đặt và tải gói CDN kèm theo các kiểu TypeScript.
Cài đặt
Phần tiêu đề “Cài đặt”npm install @wink/elementsTải trong app/root.tsx
Phần tiêu đề “Tải trong app/root.tsx”useEffect chỉ chạy trên trình duyệt, không bao giờ chạy trong quá trình render phía server:
import { useEffect } from 'react';import { Links, Meta, Outlet, Scripts, ScrollRestoration,} from '@remix-run/react';import { load } from '@wink/elements';
export default function App() { useEffect(() => { load({ clientId: import.meta.env.VITE_WINK_CLIENT_ID }); }, []);
return ( <html lang="en"> <head> <Meta /> <Links /> </head> <body> <Outlet /> <ScrollRestoration /> <Scripts /> </body> </html> );}Biến môi trường
Phần tiêu đề “Biến môi trường”Remix (dựa trên Vite, phiên bản 2.8+) hỗ trợ import.meta.env cho các biến được phơi bày trên trình duyệt. Tiền tố VITE_ để phơi bày biến cho bundle trình duyệt:
VITE_WINK_CLIENT_ID=your-client-idĐối với các thiết lập Remix cũ hơn sử dụng adapter Node.js, trả về client ID từ loader gốc và đọc trong component:
import { json } from '@remix-run/node';import { useLoaderData } from '@remix-run/react';
export async function loader() { return json({ winkClientId: process.env.WINK_CLIENT_ID });}
export default function App() { const { winkClientId } = useLoaderData<typeof loader>();
useEffect(() => { if (winkClientId) { load({ clientId: winkClientId }); } }, [winkClientId]);
// ...}Sử dụng trong các route
Phần tiêu đề “Sử dụng trong các route”export default function HotelsRoute() { return ( <main> <wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID" /> </main> );}Kiểu TypeScript
Phần tiêu đề “Kiểu TypeScript”Thêm file khai báo JSX intrinsic từ trang tích hợp React — Remix sử dụng React bên trong.