6時だョ!!全員集合!!

Rails・JavaScrictを中心にアウトプットします。

2022年4月18日 りあクト! 第5章 なぜReactはテンプレートを使わないのか(p.18~)

なぜReactはテンプレートを使わないのか

JSファースト(思想)

HTML テンプレート派 AngularJS、Angular、Vue.js、Ember.js、Aurelia、Svelte など

JS ファースト派 React、Preact、Mithril、Cycle.js、hyperapp など

JSファーストのメリット

  • 決まりごとが少なく、JavaScriptの表現を活用してより短いコードでコンポーネントを記述することが出来ます。
  • ReactのエラーはJavaScriptのエラーのため特定がしやすいです。
  • JSXが純粋な式のため、静的解析や型推論に適しているため、IDEやLintといったツールのサポートが受けやすいことに加えて、TypeScriptとの相性が良いです。

テンプレートのデメリット

なぜReactはViewをタグツリーで表現するのか

JSファースト派フレームワークの内、React、Preact以外はHyperSctiptというライブラリをviewのレンダリングに使っています。

HyperScript

ReactにおけるReact.createElement()のメソッドコールに相当するものを汎用的に簡略化できるライブラリです。

クライアントまたはサーバー上で、JavaScriptを使用してハイパーテキストを作成します。 https://github.com/hyperhype/hyperscript (公式より)

var h = require('hyperscript')
h('div#page',
  h('div#header',
    h('h1.classy', 'h', { style: {'background-color': '#22f'} })),
  h('div#menu', { style: {'background-color': '#2f2'} },
    h('ul',
      h('li', 'one'),
      h('li', 'two'),
      h('li', 'three'))),
    h('h2', 'content title',  { style: {'background-color': '#f22'} }),
    h('p',
      "so it's just like a templating engine,\n",
      "but easy to use inline with javascript\n"),
    h('p',
      "the intention is for this to be used to create\n",
      "reusable, interactive html widgets. "))

このようにJSON形式で記述することにより冗長なタグを書かなくて済む点がメリットです。

ただし、属性を持った要素がその子として複数のテキストまたは別の要素を持ってというようなノードツリーによるデータ構造を視覚的にわかりづらいです。

JSファーストで制御ロジックにマークアップが混在するからこそ、マークアップ部分が 視認できるタグを用いた構文が好まれているようです。そのため、Reactでは、JSXを用いてUIを表現しています。

React用の各種レンダラー

HyperScriptはハイパーテキスト、つまりHTMLのみを対象にしていますが、それに対してJSXはXML全般を表現するためのものです。 各プラットフォームに合わせて具現化するためのものがレンダラーで、レンダラーの共通の記述言語がJSXです。

レンダラー 内訳
React DOM HTML DOM
react-test-renderer JavaScript
React ART HTML5 Canvas
React Native iOSおよびAndroidのネイティブアプリケーション
React Native for Windows + macOS WindowsおよびmacOSのネイティブアプリケーション
React 360 ブラウザ上で動くVRアプリケーション
React-pdf PDFドキュメント
react-theree-fiber WebGLによる3Dグラフィック
React Figma Figmaプラグイン
React Sketch.app Sketchファイル

JSXは初見ではわかりにくく感じますが、JSXを使うことのメリットを学習してきました。次章からJSXの書き方を見ていきます。

JSXを使うメリット

  • JavaScriptの構文が使えます。
  • タグを使うので視認性に優れています。
  • ESLintの恩恵を受けられます。
  • JSXはJavaScriptの構文拡張なので、条件分岐や繰り返しにJavaScriptの構文を使うことが出来ます。
  • TypeScriptは言語レベルでJSXをサポートしており、tsconfig.json の設定にJSXのオプションがあり、コンパイラtscがJSXをReact.createElement() などの関数コールに変換してくれます。

関数コール(関数呼び出し)

関数呼び出しとは、プログラムから関数サブプログラムや関数ライブラリを呼び出すことである。 プログラムはいわば関数の組み合わせであるから、プログラムの処理は関数呼び出しを行いながらなされる。

参考

りあクト! TypeScriptで始めるつらくないReact開発 第3.1版【Ⅱ. React基礎編】 p.18~