行ってきました。
React現状確認
@koba04 さん。
一人React.js Advent Calendar 2014 - Qiita にはお世話になりました。
React のこれまでの歴史と最新情報のまとめ。
- Facebook はもちろん、Instagram, Netflix, airbnb なども React を採用
- React Dev Tool で各社 web サイト見ると確認できる!
- 大半のコンポーネントは Stateless Function Components (SFC) で書ける
- アロー関数で JSX だけ返すようなやつ
const Item = ({item}) => ( <div> ... </div> );
- state やライフサイクルメソッドは持たせることができないので ES2015 のクラスを使う
- パフォーマンス最適化が将来導入される...?
- ES2015 の Class 記法によるコンポーネント
- Mixins は死んだ
React.createClass
も outdated な感じ
- React.PureComponent なるものの導入が議論されてるらしい。詳しくは React の Issue #6914 を。
- React のパフォーマンス測定には react-addons-perf が使える。詳しくは
- PropTypes はレガシー
- Flow や TypeScript を使おう
- Ref と DOM
- String Ref(
<input ref="title">
みたいなの)はレガシー。callback Ref を使おう - findDOMNodes はあんまり使うことない
- String Ref(
- テスト
- airbnb/enzyme というテストユーティリティがいいらしい
- 何ができるようになるかは調べる
- airbnb/enzyme というテストユーティリティがいいらしい
- ESLint
- eslint-plugin-react、eslint-plugin-jsx-a11y
- その他
- react-basic: React の基本コンセプトを学ぶのに良い
- 最新情報は reactjs/core-notes を watch しよう
感想
内容たっぷり。かつもう少し勉強してからでないとピンと来ない部分もあってまだまだ勉強が足りないなと反省。
今使ってる機能が一部 legacy という扱いになってたり(太字部分)してびっくりです。
なぜReduxを使うのか
@kuy さん。
Redux 関係の Qiita 記事、参考にさせていただいてます。
- Redux 人気は右肩上がり
- Flux が解決したもの:React 単体のつらみ
- Redux のいいところ
- Single Store, Single State
- 状態管理に特化
- Store の役割を分割して名前をつけた(Reducer, Middleware など)
- Reduxは状態管理に特化したライブラリなので、素の状態のまま使うのはおすすめできない。必要なMiddlewareを入れよう
reducer で他の reducer が担当する State が欲しくなったらどうするの?
- 分割単位に問題がないか考えてみる
- Middleware で情報を補完する
- Action には View が持ってる最小限の情報を持たせる
- Middleware でその Action をひろって改変する
非同期処理との戦い
componentDidMount
で初期データを読み込むのは絶対 NG- redux-thunk 使ってもイマイチ...
- Action Creator に複雑な処理を全部押し込んでるけどいいの?
- テストどうするの?
- そこで、redux-saga
- 非同期処理を
yield
で同期処理っぽく書ける?
- 非同期処理を
function* runRequestPosts() { const { date, error } = yield call( callAPI, 'http://localhost:8080/posts/' ); if (data && !error) { yield put(successPosts({ data }); } else { yield put(failurePosts({ data }); } } function* handleRequestPosts() { yield* takeEvery(REQUEST_POSTS, runRequestPosts); }
まとめ
- 背景にあるアイディアや何を解決しようとしているのかを理解して、ライブラリの流行り廃りに振り回されないようにしよう
- Reducer の分割は一筋縄ではいかないのでしっかり悩もう
- Redux には適切な Middleware を導入しよう
感想
「素の Redux でがんばるのってつらくない?Middleware 入れるの前提になってるの?」とか
「Redux で非同期処理するのに redux-thunk 導入してみたけど Action Creators がごちゃごちゃしてきて、果たしてこれでいいのかという気持ちになる」とか
Redux をちょっと触ったばかりで個人的に思っていた疑問に答えていただけて、ありがたかったです。
やっぱり非同期処理は redux-saga かなー。
Relay
@hokaccha さん
- Relay
- GraphQL
- クエリ言語
- クライアント/サーバー間のやり取り
- REST とかと同じレイヤー
- Relay
- 特徴
- Declarative
- React だけ使った場合よりも、より宣言的に書ける
- Colocation
- Mutations
- Declarative
- 特徴
あわせて読みたい
GraphQL が気になったらこれ読むと良さそう
Basics | Let’s Learn GraphQL | Learn GraphQL
感想
Relay、全く知らなかったんですがコンセプトとかサンプルコード見せていただいてだいぶイメージ湧きました。
印象としては、おもしろそー&便利そう が2割で、色々つらそう&今は手を出すべきじゃなさそう が8割。
Getting Started 読むのも React / Redux をもう少し勉強してからでいいかな。
How to style React components
スライド:How to style React components
@Quramy さん
今日は下2つの話。
CSS in JS
- スタイルもJSで書けばいいんじゃないの?
- inline-style を利用することで、Style をコンポーネントに閉じ込めることができる
- できないこと
- 擬似要素セレクタ
::before
- 擬似クラスセレクタ
:hover
- メディアクエリ
- ツール: FormidableLabs/radium: A toolchain for React component styling.
- 擬似要素セレクタ
CSS Modules
/* src/Card.jsx */ import React from "react"; import * as st from "./Card.css"; // .cssからimport export class Card extends React.Component { render() { const {title, children} = this.props; return ( <div className={st.root} > {/* class名がexportされている */} <header className={st.title}>{title}</header> <div>{children}</div> </div> ); } }
あわせて読みたい
Reactを使ったモジュラーCSS : CSS-in-JSとCSS Module | プログラミング | POSTD
感想
CSS in JS と CSS Modules、どちらも聞いたことある程度だったけど両者の違いが非常にわかりやすかったです。
sass とか less とか使ってる人には CSS Modules の方がいいのかな。
私も CSS Modules の方が覚えること少ないし良さそうという印象を持ちました。
Atomic Design powered by React
五藤 佑典 さん
新サービスで Atomic Design という考え方を取り入れた話。
- リリース日だけが決まっていて仕様も UI デザインもないまま新サービス開発開始
- コンポーネントの粒度をチームで明確化したい -> Atomic Design
- Atomic Design: UI Component の要素を科学の原子論的な要素に見立て、小さいシンプルなコンポーネントを組み合わせて大きなコンポーネントにする
- Atoms
- チェックボックス
- ボタン
- スライダー
- ヘディング(見出し)
- バルーン
- アイコン
- Molecules
- ラベル付チェックボックス
- Organisms
- グローバルナビ
- 個人の感覚に依存しないコンポーネントの粒度設計
- 高階関数を利用することでコンポーネントのバリエーションを増やす
- 理想と現実のバランス
- Flux しすぎない
あわせて読みたい
Atomic Design を実案件に導入 - UI コンポーネントの粒度を明確化した結果と副産物 | ygoto3.com
感想
Atomic Design は初めて聞きました。
React にしてもそうですが、こういった中〜大規模な成功事例を聞くのはすごく勉強になりますね。
Atomic Design がすごいのではなくて、これを取り入れた上で
「何が Atoms で、何が Molecules で、何が Organisms なのか」というコンポーネントの粒度に対して
チームでの共通認識を形成した開発チームがすごいのだろうなあ、と勝手に思いました。
おわりに
というわけで非常に盛りだくさんでした。
私のような React 初学者でも理解できる&実用的な内容と、実務でバリバリ使ってる人にも知見となる内容のバランスがよかった気がします。
9/3 に HTML5 Conference が開催されるそうなので楽しみ。