カスタムコンポーネントで Hello World
前提
2つ方法があるが、ここでは、動作確認できている 1 だけ記載。
- tsx として別ファイルに定義し、md ファイルでは import して使う
- ここでは、この方法を記載
- mdx 内に埋め込む
- コードは ts でなく js にする必要あり
- 拡張子は md でなく mdx にする必要あり
- しかし、うまくいっていない。ts モードとの共存がうまくいかない?
呼び出し
sample.md
import SampleTag from '@site/src/components/SampleTag';
こんにちは! <SampleTag>カスタムタグの例</SampleTag> を使ってみましょう。
出力
こんにちは! カスタムタグの例 を使ってみましょう。
コンポーネントの定義
src/components/SampleTag.tsx
import React from 'react';
interface SampleTagProps {
children: React.ReactNode;
}
const SampleTag: React.FC<SampleTagProps> = ({ children }) => {
return (
<span style={{ color: 'red', fontWeight: 'bold', border: 'solid 1px', padding: '5px' }}>
{children}
</span>
);
};
export default SampleTag;
補足: style 指定について
tsx
<span style={{ backgroundColor: '#e0f7fa', padding: '2px 6px', borderRadius: '4px' }}>
→ "..."
ではなく {{ ... }}
である点に注意
もし
{{}}
を使わず、style="..."
のように書こうとすると、
文字列として処理されてしまい、React の style 属性として適切に動作しません。
らしい