コンポーネントの利用

MDX では、Markdown の中に rEFui JSX コンポーネントを直接埋め込むことができます。再利用可能なコンポーネントを components/ ディレクトリに配置することで、すべてのページから即座に利用可能になります。

コンポーネントの作成

// components/Callout.jsx
export default function Callout(props, ...children) {
	return <div class="callout">{...children}</div>
}

MDX 内での使用

<Callout>
  ヒント: 各セクションを簡潔にまとめると、読者の可読性が向上します。
</Callout>

クライアント専用コンポーネント

ブラウザ API に依存するコンポーネント(Window オブジェクトの使用など)を作成する場合は、ファイル名に .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 のインポートを含んでおり、サーバーサイドでの静的レンダリング(SSG)時に直接処理できないため、静的レンダリング用のフォールバックバージョンを用意する必要があります。

// components/Counter.static.jsx
export default function Counter({ initial = 0 }) {
	return (
		<div>
			[ このコンポーネントを表示するには JavaScript を有効にしてください ]
		</div>
	)
}

ページ内での記述方法:

<Counter />

実際のプレビュー:

[ You need to enable JavaScript to load this component. ]

より詳細なカスタマイズ方法については、カスタムコンポーネント を参照してください。