SlideShare a Scribd company logo
コンポーネント指向
による、Reactの
ベストプラクティスと
バッドプラクティス
@axross
Data Binding JS Night
Hi :)
• Kohei Asai
• @axross
• Software Engineer
• React.js, express.js
コンポーネント指向
コンポーネント指向を推奨
ReactのにおけるComponent
const SomeComponent = React.createClass({
render() {
return (
<div>
<span>{this.state.valueA}</span>
<span>{this.props.valueB}</span>
</div>
);
},
});
内部状態
外からの値
Component = DOMとJSのセット、UI部品
値 -> DOM 変換器
• stateを使わず、propsを使うようにすれば、
Componentは「値 -> DOM 変換器」になる
Componentprops DOM
( or Virtual DOM)
JSがDOMを支配する世界
• XHRとHistory APIでSPAが可能になった
• すべての状態をJavaScriptが管理できる
• JavaScriptがDOMを支配する世界
Data-bindedな「DOM」とは
• データバインドされたすべてのDOMは、
JavaScriptの値によって吐き出される
• ならば、DOMはコンパイル結果物
• データバインディングの嬉しさはここにある
Reactの思想から逆算する
ベストプラクティスと
バッドプラクティス
コンポーネント指向 3つの法則
• 値をDOMに変換する装置であることを徹する
• 再利用されることを前提にする
• コンポーネントとそうでないものを明確に分
ける
値をDOMに変換する装置
であることを徹する
冪等性を守る
• 通常は「値 -> DOM 変換器」であるはず
• 受け入れた値が同じであれば、吐き出される
DOMは常に同じはず
• つまり、冪等性があるはず
余計な仕事はさせない
• それ以上の仕事をさせると、犠牲を生む
• 必要以上なstateの保持・利用
• コンポーネントの中でXHR
• = 冪等性を失う
• = 疎結合ではなくなる
必要以上に状態を持たせない
• 必要以上に状態を持たせると
• 同じ値を外から与えたとしても、吐き出さ
れるDOMが違うものになる可能性がある
• = テストが困難になる
副作用のある行為を含めない
• 副作用のある行為はコンポーネントの外ですべき
• XHR、Web Storageへのアクセスなど
• FluxのStoreをsubscribeするなど
• = 結果的に状態を持ってしまう
• = 依存が増え、テストが困難になる
コンポーネントが再利用
されることを前提にする
componentDidMountに注意
• componentDidMountで、writeな作用のある
Flux Actionを呼んでいる
• コンポーネントをmountしただけで、
他のコンポーネントに作用してしまう
• = コンポーネントの副作用
「どう使うか」は「使う時」に
• コンポーネント自体の位置やサイズを指定す
るCSSもよろしくない
• それは「コンポーネントをどう使うか」と
いう話であって、「コンポーネントの定義」
とはコンテキストが異なってしまう
• = 別の場所にそのまま置けない
コンポーネントと
そうでないものを
明確に分ける
「そうでないもの」も必要
• 冪等性のあるコンポーネントのみでクライア
ントサイドのアプリケーションは作れない
• 誰かが状態を持ったり、XHRする必要がある
• 無理のないように設計するには、
「そうでないもの」も必要
テスト可能範囲を広げるために
• Componentの親となる層は諦める
• 状態を持ち、Flux Storeをsubscribeする
• コンポーネントにpropsを渡す
• ユニットテストが不可能な唯一の存在
• = 代わりに他のすべてのテストが容易になる
CSS設計へのアンサー
単位を合わせる
• 1 コンポーネント = 1 BEM Blockとかにする
• ファイル名、セレクタ名も合わせる
• 名前の競合が防がれる
• 他のセレクタへの依存や影響がなくなる
• = カジュアルに削除できる・再利用できる
まとめ
Reactとコンポーネント
• Reactはコンポーネント指向
• コンポーネントは、値 -> DOM 変換器 として
機能する
コンポーネント指向 3つの法則
• 値 -> DOM 変換器 であることを徹する
• 再利用されることを前提にする
• コンポーネントとそうでないものを明確に分
ける
メリット
• テスタブル
• 冪等性と疎結合であることが担保される
• カジュアルな変更・削除と再利用が可能
• 高速なPDCAサイクルに弱くない
• CSS設計も助ける
みんなもReact使おう!
Thank you
for listening :)

More Related Content

PDF
SIROK技術勉強会 #1 「Reactってなんだ?」
PPTX
ミクシィ 21卒向け Android研修
PDF
なぜ人は必死でjQueryを捨てようとしているのか
PDF
Observableで非同期処理
PDF
Javaのログ出力: 道具と考え方
PPTX
世界一わかりやすいClean Architecture
PDF
MvcのFatモデルに立ち向かう
PDF
Apache tinkerpopとグラフデータベースの世界
SIROK技術勉強会 #1 「Reactってなんだ?」
ミクシィ 21卒向け Android研修
なぜ人は必死でjQueryを捨てようとしているのか
Observableで非同期処理
Javaのログ出力: 道具と考え方
世界一わかりやすいClean Architecture
MvcのFatモデルに立ち向かう
Apache tinkerpopとグラフデータベースの世界

What's hot (20)

PDF
世界でいちばんわかりやすいドメイン駆動設計
PDF
できる!並列・並行プログラミング
PDF
nginxの紹介
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PDF
Unity開発で使える設計の話+Zenjectの紹介
PPTX
いまさら学ぶMVVMパターン
PDF
イミュータブルデータモデル(入門編)
PDF
オブジェクト指向できていますか?
PPTX
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
PDF
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
PDF
CI/CDって何が良いの?〜言うてるオレもわからんわ〜 #DevKan
PDF
イミュータブルデータモデルの極意
PPTX
イベント・ソーシングを知る
PPTX
5分で出来る!イケてるconfluenceページ
PDF
Unityでオンラインゲーム作った話
PDF
ブラック企業から学ぶMVCモデル
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
PDF
Serf / Consul 入門 ~仕事を楽しくしよう~
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
世界でいちばんわかりやすいドメイン駆動設計
できる!並列・並行プログラミング
nginxの紹介
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Unity開発で使える設計の話+Zenjectの紹介
いまさら学ぶMVVMパターン
イミュータブルデータモデル(入門編)
オブジェクト指向できていますか?
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
CI/CDって何が良いの?〜言うてるオレもわからんわ〜 #DevKan
イミュータブルデータモデルの極意
イベント・ソーシングを知る
5分で出来る!イケてるconfluenceページ
Unityでオンラインゲーム作った話
ブラック企業から学ぶMVCモデル
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
Serf / Consul 入門 ~仕事を楽しくしよう~
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Ad

Viewers also liked (8)

PDF
まだ DOM 操作で消耗してるの?
PDF
フロントエンド初学者がSPAに手を出してみた
PPTX
React を導入した フロントエンド開発
PPTX
今からでも遅くない! React事始め
PDF
React系(別言語含む)の サーバーサイドレンダリング について考えよう
PDF
JustTechTalk#10 React開発における自動テスト実践
PDF
JustTechTalk#10windowsアプリでのテスト自動化事例
PPTX
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
まだ DOM 操作で消耗してるの?
フロントエンド初学者がSPAに手を出してみた
React を導入した フロントエンド開発
今からでも遅くない! React事始め
React系(別言語含む)の サーバーサイドレンダリング について考えよう
JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10windowsアプリでのテスト自動化事例
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
Ad

Similar to コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス (14)

PDF
React+TypeScriptもいいぞ
PPTX
Reactに触れてみた
PDF
React.js + Flux入門 #scripty02
PPTX
SYSTEMI勉強会まとめ資料(React基礎まとめ)
PPTX
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
PDF
Start React with Browserify
PDF
データビジュアライゼーションの作り方
PDF
react-ja.pdf
PDF
Intoroduction to React.js
PDF
20160421 react勉強会
PDF
React introduntion
PPTX
Flight入門
PDF
マーブル図で怖くないRxJS
PDF
サービス開発における フロントエンド・ドメイン駆動設計の実践
React+TypeScriptもいいぞ
Reactに触れてみた
React.js + Flux入門 #scripty02
SYSTEMI勉強会まとめ資料(React基礎まとめ)
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Start React with Browserify
データビジュアライゼーションの作り方
react-ja.pdf
Intoroduction to React.js
20160421 react勉強会
React introduntion
Flight入門
マーブル図で怖くないRxJS
サービス開発における フロントエンド・ドメイン駆動設計の実践

コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス