2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

カスタム属性(data-*)を使用してReact側で値を取得する

2
Posted at

カスタム属性とは、HTMLで「開発者が自由に作れる独自の属性」のことです。

HTML5で追加された仕組み

HTMLには class / id / style などの標準属性がありますが、それ以外に「自分が欲しいデータ」を要素に持たせたいときに使います。

<!-- 標準属性(ブラウザが決めたもの) -->
<div id="app" class="container"></div>

<!-- カスタム属性(開発者が作る) -->
<div id="app" data-user-id="123" data-role="admin"></div>

data-* がカスタム属性

data- で始まる属性はすべてカスタム属性です。

<!-- これらはすべてカスタム属性 -->
<div
	data-user-id="123"
	data-week="2025-W15"
	data-props='{"name": "project"}'
	data-anything="自由"
></div>
  • data- の後ろは自由に命名できる
  • JavaScript では dataset 経由で参照できる(例:data-user-idelement.dataset.userId
  • ブラウザが勝手に削除しない(HTML5で標準化されている)

data-* を使う理由(HTML仕様とReact側の扱い)

「DOMに値を埋め込んで、JS/React 側で拾う」用途では data-* が定番です。

HTML5の仕様

  • id="example" のような通常の属性は仕様上の意味がある(予約されている)
  • data-* はカスタムデータ用として HTML5 で標準化されている
<!-- NG: カスタムデータ用に独自属性を使う(ブラウザやツール側の扱いが不安定になりやすい) -->
<div id="react-root" props='{"message": "hello"}'></div>

<!-- OK: data-属性ならカスタムデータとして安全に保持できる -->
<div id="react-root" data-props='{"message": "hello"}'></div>

React(JavaScript)側の取得方法

const container = document.getElementById("react-root")
const propsData = container.getAttribute("data-props")
const props = JSON.parse(propsData)

Laravel + Blade + React の典型パターン

Blade側で @json() を使って data 属性に埋め込み、React 側でパースして props として渡します。

Blade

<div id="week-chart" data-props='@json($weekData)'>
	-- Reactがマウントされる --
</div>

React

const container = document.getElementById("week-chart")
const props = JSON.parse(container.getAttribute("data-props"))

root.render(<WeekChart {...props} />)

なぜ data-props でないとダメか

<!-- ❌ 独自属性だと環境によっては期待通りに取得できない/扱われないことがある -->
<div id="week-chart" props='@json($weekData)'></div>

<!-- ✅ data-なら「カスタム属性」として仕様上サポートされる -->
<div id="week-chart" data-props='@json($weekData)'></div>

要点:カスタムデータをHTMLに持たせるなら data-* が標準のやり方

実務での命名例

<div id="user-list" data-user-list='@json($users)'></div>
<div id="week-chart" data-week-data='@json($weekProjects)'></div>
<div id="project-form" data-project='@json($project)'></div>

まとめdata-* は HTML5 標準のカスタム属性で、Blade → React にデータを安全に渡すためのデファクトスタンダードです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?