3.1 JSXの基本規則

単一ルート

return (
  <>
    <Header />
    <Main />
  </>
);

式の埋め込み

const name = "React";
return <h1>{name}</h1>;

{}内には式を記述できるが、if文やfor文そのものは書けない。

const label = isAdmin ? "管理者" : "一般";
return <p>{label}</p>;

3.2 属性

<button
  type="button"
  aria-pressed={selected}
  disabled={isSaving}
>
  保存
</button>

boolean属性はboolean値として渡す。

3.3 スタイル

<div
  style={{
    display: "grid",
    gap: 8,
    opacity: disabled ? 0.5 : 1,
  }}
/>

styleはオブジェクトであり、プロパティはcamelCaseである。
大規模なスタイル管理ではCSS Modules、CSS-in-JS、ユーティリティCSSなどプロジェクト方針を選ぶ。

3.4 安全な文字列表示

Reactは通常、文字列をエスケープして表示する。

<p>{userInput}</p>

HTML文字列を直接挿入するdangerouslySetInnerHTMLは、信頼できるサニタイズ処理とセットで使う。

<div dangerouslySetInnerHTML={{ __html: sanitizedHtml }} />

3.5 Fragment

import { Fragment } from "react";

items.map(item => (
  <Fragment key={item.id}>
    <dt>{item.term}</dt>
    <dd>{item.description}</dd>
  </Fragment>
));

短縮構文<>...</>にはkeyを付けられないため、必要な場合はFragmentを明示する。