OSSユーザーのための勉強会<OSS X User Meeting>#13 React.js
について昨日(2月17日)きいてきたので、内容をメモメモ
■React.jsがなぜ素晴らしいのか
・自己紹介 IT芸人
・BackboneやAngularはどうもなじめず
prototype.js→JQuery→フレームワーク(Angular:2.0がもうすぐ、Backbone)
・前からきいたことはあったReactを年末に開始
Viewの上にさらに載せるのは・・・2階建てのMVC
シンプルな方法
・公式チュートリアルを一通り→すばらしい
・DOM操作はなぜ難しいのか
DOMはどこからでも変更可能
DOMが状態を持っている
DOMとコードがなはれ杉
・もっと簡単にやろう
DOMを描き変えないで常にHTML全体を生成
EventListenerをやめてonXXXプロパティを使おう
HTMLとJavascriptを1つにまとめる
→2000年前半は普通だった
・サーバーサイド生成
クライアント
ブラウザ
サーバ
HTML生成部(テンプレート)
画面を表示するための状態(テンプレート変数)
ロジック(コントローラー)
・React
クライアント
ブラウザ
HTML生成部(テンプレート)
画面を表示するための状態(テンプレート変数)
クライアントロジック
サーバー
サーバーロジック
・1つ使えるのに画面全体変える
・Example
こーどぺんというサイトにある
Javascriptの中にHTMLが入っている
JSX
Reactは、Domから読むのでなく、状態変数から判断
・機能追加が簡単
・人間が状態の差分を管理していた
→HTMLを常に再構成することで変数から生成
ロジックは変数の書き換え、
ビューは変数を見る
・でも
HTML全体を描き変えると遅くない
CSSアニメーション使えないよね
実は日本語入力できないよね
→Virtual DOM
→差分を取ったところだけ書きかえる
・もっと技術的には
key
compornent
property
・さらに
componentで再利用可能な部品化
サーバーサイドレンダリング
もっと大きなアプリではFlux
AndroidアプリはReactNative
・問題点
コードを書く人がHTMLも書く
既存のJS部品が使えない(こともない)
特にTwitterWidgetとか外部JSは苦手
・Flux(ふらっくす:ぐらふQLとかもある)
考え方の名前(MVCとかと一緒)
ReactではDataさえ変更すれば画面に反映される
・同じ考え方とツール(差分を取って画面書き換え)
・Yet another React.js
・React Native
(angular JS 2.0でも差分書き換えの思想?)
・まとめ
・サーバーサイドのようなシンプルな流れでAjaxを
・画面を描き変える時は常に前面書き換え
・Webはコンポーネントベースと相性がいい
・既存のjs.uiライブラリと同居は難しそう
→業務アプリでパラメーターをいじるものと、相性いい
Q&A
・DatePickerだめ?
→だめだけど、かわりにつかえるものがある
・Angular.jsをReact書きなおし
→Reactコンポーネントで
・HTMLいっぱいかくよね
→コンポーネント
フォームのHTML→コンポーネント
リストのHTML→コンポーネント
のようにコンポーネントを組み合わせる
・画面の状態爆発は賛同、で、はやってない理由
→しりたいところ
Angularも1から2で、互換性?
■改善React道
・今日MaterialUIとかつかって、つくってきた
・自己紹介
・本日のテーマ
1年超のReact開発におけるわ私めの手法思想と改善の歴史をさらす
・そういえば、Reactって良いの?
いいと思う。ちゃんと動く。他のが好きなら、それもいい
あつい思いはない
・アーキテクチャの要点、かわるよね。そこで状況を共有
作ってるの「管理画面」
システム構成「JSがアプリケーションすべて。全部JSに入っている」
・ざっくりした特徴:とくちょうがある
・要件複雑化、生産性を落とさずに作る→メンテナンス性、拡張性
・チームの状況:
はじめ2人 やること多い。土台を築いていけば
今 4人 アクロバティック→どう考えを共有するか
今後 2~3人増える
アプリケーション複雑
gulpよりnpmスクリプトをたたくように
webパック buildははやい
Webサーバー ライブリロードAJAXのクロスオリジン制限に引っ掛からないように
エディターwebストーム atom
ライブラリ IMMUTABLE.JS constわなのため
Lodash
時間処理系moment.js
Appフレームワーク
React,ReactRouter,ReactBootstrap
・どう考えて作っていくか
サンプル
私的映画鑑賞履歴App Movie Logger:映画1に対して監督1~0、俳優3人まで
TypeScript,MatrialUIつかってやりました
・Reactの話
同じポリシーの共有:Prop/PropTypesはちゃんと定義する
isrequiredをつける(ワーニング)
Stateの管理しかるべき場所で集中管理
巨大なState→分散する誘惑→改修するとき責任範囲わからなくなる
・コンポーネント共通化をやりすぎるな
メリットと同じくらい、リスクもある
・Reactがんばらせない
Viewに関することいろいろできる→頑張らせすぎると、コードも複雑になる
・Fluxまわり
Fluxをどうとらえるか
責務とスコープ
ReduxとかのFluxフレームワークは使っていない
Modelの役割についてドメインオブジェクト1個に関するAPI提供
セッターメソッド、バリデーションメソッド
そもそものモデル導入の理由1
Viewの中でバリデーションを扱う:たいへん
→ステートに聞けばバリデーション完結にするように
型の解決(だれが変換かける)
集合を返すのか、1つの値を返すのかの分担
Modelのライフサイクル
だれがさわってもいいよ
immutable.jsのrecord:propsと関係なく
スコープアクセス権
Q&A
AJAXは
スーパーエージェント、ライブラリ
Viewのテスト
テストUtilがReactあり
について昨日(2月17日)きいてきたので、内容をメモメモ
■React.jsがなぜ素晴らしいのか
・自己紹介 IT芸人
・BackboneやAngularはどうもなじめず
prototype.js→JQuery→フレームワーク(Angular:2.0がもうすぐ、Backbone)
・前からきいたことはあったReactを年末に開始
Viewの上にさらに載せるのは・・・2階建てのMVC
シンプルな方法
・公式チュートリアルを一通り→すばらしい
・DOM操作はなぜ難しいのか
DOMはどこからでも変更可能
DOMが状態を持っている
DOMとコードがなはれ杉
・もっと簡単にやろう
DOMを描き変えないで常にHTML全体を生成
EventListenerをやめてonXXXプロパティを使おう
HTMLとJavascriptを1つにまとめる
→2000年前半は普通だった
・サーバーサイド生成
クライアント
ブラウザ
サーバ
HTML生成部(テンプレート)
画面を表示するための状態(テンプレート変数)
ロジック(コントローラー)
・React
クライアント
ブラウザ
HTML生成部(テンプレート)
画面を表示するための状態(テンプレート変数)
クライアントロジック
サーバー
サーバーロジック
・1つ使えるのに画面全体変える
・Example
こーどぺんというサイトにある
Javascriptの中にHTMLが入っている
JSX
Reactは、Domから読むのでなく、状態変数から判断
・機能追加が簡単
・人間が状態の差分を管理していた
→HTMLを常に再構成することで変数から生成
ロジックは変数の書き換え、
ビューは変数を見る
・でも
HTML全体を描き変えると遅くない
CSSアニメーション使えないよね
実は日本語入力できないよね
→Virtual DOM
→差分を取ったところだけ書きかえる
・もっと技術的には
key
compornent
property
・さらに
componentで再利用可能な部品化
サーバーサイドレンダリング
もっと大きなアプリではFlux
AndroidアプリはReactNative
・問題点
コードを書く人がHTMLも書く
既存のJS部品が使えない(こともない)
特にTwitterWidgetとか外部JSは苦手
・Flux(ふらっくす:ぐらふQLとかもある)
考え方の名前(MVCとかと一緒)
ReactではDataさえ変更すれば画面に反映される
・同じ考え方とツール(差分を取って画面書き換え)
・Yet another React.js
・React Native
(angular JS 2.0でも差分書き換えの思想?)
・まとめ
・サーバーサイドのようなシンプルな流れでAjaxを
・画面を描き変える時は常に前面書き換え
・Webはコンポーネントベースと相性がいい
・既存のjs.uiライブラリと同居は難しそう
→業務アプリでパラメーターをいじるものと、相性いい
Q&A
・DatePickerだめ?
→だめだけど、かわりにつかえるものがある
・Angular.jsをReact書きなおし
→Reactコンポーネントで
・HTMLいっぱいかくよね
→コンポーネント
フォームのHTML→コンポーネント
リストのHTML→コンポーネント
のようにコンポーネントを組み合わせる
・画面の状態爆発は賛同、で、はやってない理由
→しりたいところ
Angularも1から2で、互換性?
■改善React道
・今日MaterialUIとかつかって、つくってきた
・自己紹介
・本日のテーマ
1年超のReact開発におけるわ私めの手法思想と改善の歴史をさらす
・そういえば、Reactって良いの?
いいと思う。ちゃんと動く。他のが好きなら、それもいい
あつい思いはない
・アーキテクチャの要点、かわるよね。そこで状況を共有
作ってるの「管理画面」
システム構成「JSがアプリケーションすべて。全部JSに入っている」
・ざっくりした特徴:とくちょうがある
・要件複雑化、生産性を落とさずに作る→メンテナンス性、拡張性
・チームの状況:
はじめ2人 やること多い。土台を築いていけば
今 4人 アクロバティック→どう考えを共有するか
今後 2~3人増える
アプリケーション複雑
gulpよりnpmスクリプトをたたくように
webパック buildははやい
Webサーバー ライブリロードAJAXのクロスオリジン制限に引っ掛からないように
エディターwebストーム atom
ライブラリ IMMUTABLE.JS constわなのため
Lodash
時間処理系moment.js
Appフレームワーク
React,ReactRouter,ReactBootstrap
・どう考えて作っていくか
サンプル
私的映画鑑賞履歴App Movie Logger:映画1に対して監督1~0、俳優3人まで
TypeScript,MatrialUIつかってやりました
・Reactの話
同じポリシーの共有:Prop/PropTypesはちゃんと定義する
isrequiredをつける(ワーニング)
Stateの管理しかるべき場所で集中管理
巨大なState→分散する誘惑→改修するとき責任範囲わからなくなる
・コンポーネント共通化をやりすぎるな
メリットと同じくらい、リスクもある
・Reactがんばらせない
Viewに関することいろいろできる→頑張らせすぎると、コードも複雑になる
・Fluxまわり
Fluxをどうとらえるか
責務とスコープ
ReduxとかのFluxフレームワークは使っていない
Modelの役割についてドメインオブジェクト1個に関するAPI提供
セッターメソッド、バリデーションメソッド
そもそものモデル導入の理由1
Viewの中でバリデーションを扱う:たいへん
→ステートに聞けばバリデーション完結にするように
型の解決(だれが変換かける)
集合を返すのか、1つの値を返すのかの分担
Modelのライフサイクル
だれがさわってもいいよ
immutable.jsのrecord:propsと関係なく
スコープアクセス権
Q&A
AJAXは
スーパーエージェント、ライブラリ
Viewのテスト
テストUtilがReactあり