Preact とかいう React のサブセット。何が違うのか
React よりもファイルサイズが小さいと謳っている Preact。
Fast 3kb React alternative with the same ES6 API. Components & Virtual DOM.
React と同じ ES6 の API で 3kb と軽量だし高速だぜ! とのこと。
で、本家 React と何が違うのか。Preact のドキュメント に React との違いが説明してあったので、Google 翻訳に突っ込んで雑に整形した。
以下、その文章。雑すぎ注意。
React との違い
Preact 自体は、React の再実装ではありません。違いがあります。これらの相違点の多くは些細なものです。React と100%の互換性を達成しようとする薄いレイヤーである preact-compat を併用することで、相違を完全に除去することができます。
Preact が React のすべての機能を含むことを試みていないのは、軽量と集中のためです。そうでなければ、すでに非常に複雑でよく構築されたコードベースである React プロジェクトに最適化を提出する方が理にかなっています。
バージョン互換性
Preact と preact-compat の両方について、バージョンの互換性は、React の現在および以前のメジャーリリースに対して測定されます。 React チームによって新機能が発表されると、Project Goals の意味では、それらの機能が Preact のコアに追加される可能性があります。 これはかなり民主主義的なプロセスであり、議論や意思決定を通じて常に進化しています。
したがって、ウェブサイトとドキュメンテーションは、互換性や比較を論じるときに、
React 0.14.x
と15.x
を反映しています。
何が含まれているか
- ES6 Class Components
- クラスはステートフルなコンポーネントを定義する表現力のある方法を提供します
- High-Order Components
- ステートレスな Pure Functional Components
props
を引数として受け取って JSX/VDOM を返す関数
- Contexts:
context
は Preact 3.0 以降でサポート- Context は実験的な React 機能ですが、一部のライブラリで採用されている
- Refs: Preact 4.0 に関数リファレンスのサポートが追加され、文字列の参照は
preact-compat
でサポートされている- Refs は、レンダリングされた要素と子要素を参照する方法を提供します。
- Virtual DOM Diffing
- 与えられたもの。Preact の diff はシンプルですが効果的で、非常に高速です。
h()
,React.createElement
のより一般的なバージョン- この考えはもともとハイパースクリプトと呼ばれ、 React エコシステムをはるかに上回る価値があるため、Preact は元の標準を推進しています。
- 多少可読性が高くなります
h('a', { href:'/' }, h('span', null, 'Home'))
何が追加されているか
Preact は実際に React コミュニティの仕事に影響を受けた便利な機能をいくつか追加しています
this.props
とthis.state
がrender()
に渡されます- 手動でも参照することはできますが、こちらのほうが destructuring するときによりきれいです
- 制御された
setTimeout(1)
を使用してDOM更新の一括処理(requestAnimationFrameも使用可能) - CSSクラスのために
class
を使うことができます。className
は引き続きサポートされますが、class
が推奨です。 - コンポーネントと要素のリサイクル/プーリング
何がなくなっているか
- PropType バリデーション。全員が PropType を使用するわけではないので、Preact のコアの一部ではありません。
- PropType は
preact-compat
で完全にサポートされているので、手動で使用できます。
- PropType は
- Children: Preact では必要ありません。
props.children
は常に配列なので。React.Children
はpreact-compat
で完全にサポートされています
- 合成イベント:Preactのブラウザサポートターゲットは、この余分のオーバーヘッドを必要としません。
何が違うのか
Preact と React には若干の微妙な違いがあります。