使用组件
MDX 支持在 Markdown 文档中直接嵌入 rEFui JSX 组件。将可复用组件置于 components/ 目录,即可在任意页面中直接调用。
组件定义
// components/Callout.jsx
export default function Callout(props, ...children) {
return <div class="callout">{...children}</div>
}
在 MDX 中调用
<Callout>
提示:尽量保持章节短小精悍,以提升阅读体验。
</Callout>
客户端交互组件
若组件依赖浏览器 API,请使用 .client 后缀命名:
components/Map.client.jsx
交互示例:计数器
以下为一个简单的交互组件示例:
// components/Counter.client.jsx
import './Counter.css'
import { signal } from 'refui'
export default function Counter({ initial = 0 }) {
const count = signal(initial)
return (
<div class="counter">
<button on:click={() => count.value--}>-</button>
<span>{count}</span>
<button on:click={() => count.value++}>+</button>
</div>
)
}
鉴于该组件引用了服务端静态渲染不支持的 CSS 模块,需额外提供一份用于服务端静态渲染的替补版本:
// components/Counter.static.jsx
export default function Counter({ initial = 0 }) {
return (
<div>
[ You need to enable JavaScript to load this component. ]
</div>
)
}
在页面中调用:
<Counter />
实际效果:
[ You need to enable JavaScript to load this component. ]
更高级的用法请查看 自定义组件。