ReactとWeb Componentの違い
Web Componentのおさらい
Web Componentは、コンポーネントを可能な限り再利用可能な形にする手法のことであり、主に以下の3つの技術から成り立っている。
カスタム要素
- カスタムされた要素とその動作を定義するためのJavaScriptコード。
シャドウDOM
- カプセル化されたDOMツリー(シャドウDOMツリー)を要素に紐付けて、関連する機能を制御するためのJavaScriptコード。シャドウDOMツリーは、通常のDOMツリーとは別にレンダリングされる。
HTMLテンプレート
Web Componentの基本的な実装方法は以下の通り。
Web Componentを明示的に利用するクラスまたは関数を作成する。
作成したカスタム要素を登録する。
CustomElementRegistry.define()
に要素名、作成したクラスまたは関数などを渡す。必要であれば、シャドウDOMをカスタム要素に紐付ける。
Element.attachShadow()
を利用する。必要であれば、HTMLテンプレートを記述する。前述の
<template>
と<slot>
を利用する。作成したカスタム要素を使用する。
ReactとWeb Componentの違いとは
ReactもWeb Componentも、再利用可能なコンポーネントを作成するという点では似ている。しかしながら、両者の目的は違うものだと認識している。
Reactの目的
- DOMとデータを同期させるためのライブラリを提供する。再利用可能なコンポーネントはあくまでそのライブラリを利用する際の副産物である。
Web Componentの目的
- 再利用可能なコンポーネントを作成することそのもの。
Web Componentの使い所
個人的にはReactやVueなどのライブラリ or フレームワークが存在する今のWebにおいて、それらが使えるのであれば使うべきだと思う。何か特殊な事情があり、それらが使えないが再利用可能なカスタムコンポーネントを使いたい場合にWeb Componentの使用を検討すべきだと考える。
References
- Mozilla:ウェブコンポーネント、mdn web docs、MDN (オンライン)、入手先 <https://developer.mozilla.org/ja/docs/Web/Web_Components> (参照2022-09-29).
- React:Web Components、React公式ドキュメント、React Organization (オンライン)、入手先 <https://ja.reactjs.org/docs/web-components.html> (参照2022-09-29).