跳转到内容
跳到正文
Animated Fluent Emojis
菜单
简体中文

在 Next.js 中使用

在 App Router 中渲染 Emoji,包括在 Server Component 中。

导入一次样式表

样式表包含动画关键帧。没有它,emoji 只会渲染为静态 sprite sheet。请在根 layout 中导入一次:

import 'animated-fluent-emojis/style.css'
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>{children}</body>
</html>
)
}

在 Server Component 中使用 Emoji

该 bundle 以 "use client"; 开头,因此 Server Component 可以直接导入 Emoji,无需包装文件:

import { Emoji } from 'animated-fluent-emojis/react'
export default function Page() {
return <Emoji id="1f44b_wavinghand" size={64} />
}

在服务端,Emoji 会渲染一个最终尺寸的空占位,因此布局不会发生偏移。emoji 在 hydration 之后出现,因为 manifest 是在首次渲染时由浏览器获取的,而不是在导入时。onLoad 或 onPlaybackEnd 这类函数无法从 Server Component 传入;这种情况下请在客户端模块中渲染 emoji。

在客户端模块中配置和预加载

configureEmojis 和 preloadEmojis 在浏览器中运行,因此请从以 "use client" 开头的模块调用它们,而不是从 Server Component 调用。在根 layout 中挂载一个小组件即可:

'use client'
import { configureEmojis, preloadEmojis } from 'animated-fluent-emojis'
configureEmojis({ assetSiteUrl: 'https://emojis.example.com' })
void preloadEmojis()
export function EmojiSetup() {
return null
}

在 layout 中把 <EmojiSetup /> 渲染在内容上方。删除 configureEmojis 这一行即可保持默认的 asset site。请在第一个 Emoji 渲染之前调用它;自定义 origin 搭配的 Content Security Policy 见自行托管 asset,预加载指定 id 见为选择器预加载。

Lookup

animated-fluent-emojis/lookup 不含 React,也没有 "use client" 声明,因此在 Server Component 和路由处理程序中同样可用。参见 lookup。