propsって何?HubSpot×Reactでキャッチコピー表示してみた【Day1】

はじめに 🌿
HubSpotでReactテーマを作ることには成功したけど、「モジュールをReactで書く」ってまだよくわからない…! そんなわたしが、気ままにReactモジュールを学んでいくシリーズをはじめました📘
この記事でわかること ✏️
-
HubSpotのReactモジュールってどうやって書くの?
-
propsってなに?どうやって使うの?
-
ページエディターとどうつながってるの?
結論 🎯
Reactモジュールは props
を通じて、HubSpotエディターの入力を表示できる! インラインスタイルで装飾すれば index.jsx
だけで完結できてとってもシンプル💡
今日のモジュール 🛠️
今日はテキストフィールドに指定したキャッチコピーを表示させるシンプルなモジュール!
モジュール (`src/theme/components/modules/CatchphraseDisplay/index.jsx`) のコードは以下:
// HubSpotのCMSコンポーネントライブラリから、TextFieldとModuleFieldsをインポート
import { TextField, ModuleFields } from '@hubspot/cms-components/fields';
// ここがReactモジュールの本体!HubSpotから受け取るpropsとして fieldValues を受け取るよ
export const Component = ({ fieldValues }) => {
// fieldValues から catchphrase という名前の値を取り出す(TextFieldのnameと一致している必要あり)
const { catchphrase } = fieldValues;
return (
// インラインスタイルで装飾したボックスを表示(背景色・左線・文字色・余白・角丸)
<div
style={{
backgroundColor: '#FEF3C7', // Tailwindの bg-orange-100 に相当
borderLeft: '4px solid #F97316', // Tailwindの border-orange-500 に相当
color: '#7C2D12', // Tailwindの text-orange-900 に相当
padding: '1rem',
borderRadius: '0.5rem',
}}
>
<p
style={{
fontSize: '1.125rem', // Tailwindの text-lg
fontWeight: 600, // Tailwindの font-semibold
margin: 0, // 段落の余白をリセット
}}
>
{/* ページエディターで入力されたキャッチコピーがここに表示される! */}
{catchphrase}
</p>
</div>
);
};
// このモジュールに含めるフィールドを定義するエリア
export const fields = (
<ModuleFields>
{/* テキストフィールド。nameは fieldValues のキーとして使われる! */}
<TextField
name="catchphrase" // fieldValues.catchphrase として使われるキー名
label="キャッチコピー" // CMSエディタに表示されるラベル
default="人生はReactのようなもの。状態次第で変わるのだ!" // 初期値(例文)
/>
</ModuleFields>
);
// モジュールのメタ情報(エディター上で表示されるモジュール名など)
export const meta = {
label: "キャッチコピー表示", // モジュールのラベル名
};
モジュール構成の解説 🔍
propsって何?
props (property) とは、Reactコンポーネントに外から値を渡すための仕組み
HubSpotのReactモジュールでは、エディターで入力された値が
props
(正確にはfieldValues
というオブジェクト)として渡されます。
詳しくはこちら:コンポーネントに props を渡す
① ModuleFields
= モジュール全体のフィールド定義エリア
fields.json
の React版みたいなイメージ!
export const fields = (
<ModuleFields>
<TextField
name="catchphrase"
label="キャッチコピー"
default="..."
/>
</ModuleFields>
);
-
ModuleFields
の中に、このモジュールで使うフィールドたちを並べて定義 -
TextField
のname="catchphrase"
が「propsのキー」になる
② export const Component = ({ fieldValues }) => { ... }
ここで fieldValues
という名前で、CMS側から渡されるすべてのフィールド値を受け取れる!
③ const { catchphrase } = fieldValues;
これはJavaScriptの分割代入。
const catchphrase = fieldValues.catchphrase;
と同じ意味だよ!
④ { catchphrase }
を return の中で使う!
return (
<p>{catchphrase}</p>
);
これで React がキャッチコピーの文字列を画面に表示してくれる🌟
🌟 全体の流れ
<TextField name="catchphrase" />
↓
→ CMSエディタで入力 → 保存
↓
→ HubSpotがReactに `fieldValues = { catchphrase: "入力したテキスト" }` を渡す
↓
→ `const { catchphrase } = fieldValues` で取り出す
↓
→ return に `{catchphrase}` を書いて表示!
ひとこと⚡
Tailwindでスタイルをつけようとしたけど、ビルド&importがうまくいかず断念…🥲 このドキュメント を見ながら、またいつかチャレンジしたい! 今回はインラインスタイルでうまくいったので、まずは大満足♡
まとめ ✨
Reactモジュールの「最小のかたち」がわかって、とてもスッキリしたDay1でした! propsを通じてフィールド値が表示できる、この感動…✨ 次回はちょっとだけ動きのあるUIにも挑戦したいな!
あわせて読みたい 📖
💬 コメントしてみる?