SlideShare a Scribd company logo
Start React with
Browserify
About me
me = {
name: "muyuu",
Twitter: "@anticyborg",
belongs: "freelance",
job: "Web Front-End Engineer"
};
Agenda
• React
• browserify
• gulp
About React
About React
• Facebook製Viewフレームワーク
• コンポーネント指向
• VirtualDOM
About React
var Hello = React.createClass({
render: function(){
return (
<div className="hello">
Hello World!
</div>
);
}
});
React.render( <Hello />, document.getElementById('helloBox') );
何が良いのか
• DOM操作を単純化
• コンポーネント単位での設計
• 可読性が高い
• メンテしやすい
• 壊れにくい
DOM操作を単純化
jQueryは「今ある要素に対して処理をする」方式
<ul>
<li class="list" data-item="1">list1</li>
<li class="list" data-item="2">list2</li>
<li class="list" data-item="3">list3</li>
</ul>
// js
$('.list').on("click", function(){
$(this).toggleClass('delete');
});
DOM操作を単純化
• DOM変更に弱い
• 現状の状態がDOMにしかない
• 拡張しずらい
DOM操作を単純化
Reactは「今のデータを元にDOMをレンダリングする」方式
var dataList = React.createClass({
render: function(){
var items = this.props.items.map(
function(item){ return <li>{item}</li>; }
);
return(
<ul>{items}</ul>
);
}
});
コンポーネント単位での設計
• 構成要素をコンポーネントに分ける
• 各コンポーネントの実装とDOMを1箇所に記述
• htmlライクな記述をJSファイル内に記述(JSX)
JSX?
JavaScript内にxmlライクなシンタックスで記述できる
var name = React.createClass({
render: function(){
return(
<div className="Wrap">
<div className="first">{this.props.first}</div>
<div className="last">{this.props.last}</div>
</div>
);
}
});
DEMO
Points
• React.createClass() でコンポーネントを作成
• renderメソッドにコンポーネントのDOMを記述
• propはコンポーネントに渡されるデータ
• stateはアプリケーションの状態を持つデータ
• stateに変更があった際には再描画される
• コンポーネント間で値を受け渡す
Components
• 1つのコンポーネントは機能もviewも1箇所に記述
• like Web components
Everything can be
Component!
Components
これからはアプリケーション設計の際には
• コンポーネント単位での設計
• 各コンポーネントの組み合わせ
これらをより重視して作らなければならない
Require?
JSはモジュールの仕組みがない
<script src="jquery.js"></script>
<script src="underscore.js"></script>
<script src="something.js"></script>
<script src="more.js"></script>
<script src="inquisitive.js"></script>
<script src="app.js"></script>
</body>
</html>
importしたい!
Browserify
Browserify
Browserify
// moduleA.js
module.exports = {
log: function(){
console.log('it is moduleA');
}
};
// moduleB.js
module.exports = {
log: function(){
console.log('this is moduleB');
}
};
Browserify
// main.js
var moduleA = require('moduleA');
var moduleB = require('moduleB');
moduleA.log();
moduleB.log();
// it is moduleA
// this is moduleB
Browserify
• jQueryを使う場合
// main.js
var $ = require('jquery');
$('.ele').on("click", anything);
Browserify
npm install -g browserify
npm install --save jquery
browserify main.js -o bundle.js
// make bundle.js
React Components with Browserify
var React = require('react');
var Child = require('./child'); // React component
var main = React.createClass({
render(){
return (
<div className="main">
<Child data={this.state.data}/>
</div>
);
}
});
Watchify
• ファイルを監視してBrowserifyのビルドを自動化
• 通常はrequireしたファイル全てを結合する
• 速度が遅い(Reactは130KB,jQueryは84KB)
• watchifyなら差分ビルドが可能
Browserify on Gulp
• jsだけではなくcss等のビルドもやってる
• gulp watch?
• gulp watchでは差分ビルドできない
• 遅い
• 1コマンドでwatchもwatchifyも動かしたい
DEMO
https://github.com/muyuu/
searchKindle
After AJAX
JSの必須スキルは
増える一方
MVW
Framework
Unit Test
E2E Test
Node.js
AltJS
Build Tool
おなかいっぱい
フロントエンドは進化の
速度が早すぎる
じゃあやめる?
人はいつ死ぬかって?
自らを成長させることを
辞めたときさ
— おれ
like tuna?
like hamster?
No!
Have Frontier Spirit
走って走って走って
なお走り続けてこそ
良い未来に進める
さ、Reactやろう

More Related Content

What's hot (20)

PDF
5分でわかる?Backbone.js ことはじめ
Kohei Kadowaki
 
PDF
iOS WebView App
hagino 3000
 
PDF
iOS の通信における認証の種類とその取り扱い
niwatako
 
PDF
React.jsでクライアントサイドなWebアプリ入門
spring_raining
 
PDF
iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
Kosuke Ogawa
 
PPTX
React を導入した フロントエンド開発
daisuke-a-matsui
 
PPTX
今からでも遅くない! React事始め
ynaruta
 
PDF
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
Kohei Asai
 
PPTX
まだDOM操作で消耗してるの?
IRI MO
 
PPTX
2時間で学ぶjQuery
Shumpei Shiraishi
 
PDF
Backbone.js
daisuke shimizu
 
PPTX
20140523 jQuery基礎 (HTML5ビギナーズ)
Daisuke Yamazaki
 
PDF
はじめてのVue.js
kamiyam .
 
PPTX
Vue.js 2.0を試してみた
Toshiro Shimizu
 
PDF
jQuery Mobile 概要
トモロヲ いちがみ
 
PPTX
20160927 reactmeetup
Naoki Kurosawa
 
PDF
React Redux Redux-Saga + サーバサイドレンダリング
エンジニア勉強会 エスキュービズム
 
PDF
WKWebViewとUIWebView
Yuki Hirai
 
PDF
AngularJSでの非同期処理の話
Yosuke Onoue
 
PDF
Vue Router + Vuex
Kei Yagi
 
5分でわかる?Backbone.js ことはじめ
Kohei Kadowaki
 
iOS WebView App
hagino 3000
 
iOS の通信における認証の種類とその取り扱い
niwatako
 
React.jsでクライアントサイドなWebアプリ入門
spring_raining
 
iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
Kosuke Ogawa
 
React を導入した フロントエンド開発
daisuke-a-matsui
 
今からでも遅くない! React事始め
ynaruta
 
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
Kohei Asai
 
まだDOM操作で消耗してるの?
IRI MO
 
2時間で学ぶjQuery
Shumpei Shiraishi
 
Backbone.js
daisuke shimizu
 
20140523 jQuery基礎 (HTML5ビギナーズ)
Daisuke Yamazaki
 
はじめてのVue.js
kamiyam .
 
Vue.js 2.0を試してみた
Toshiro Shimizu
 
jQuery Mobile 概要
トモロヲ いちがみ
 
20160927 reactmeetup
Naoki Kurosawa
 
React Redux Redux-Saga + サーバサイドレンダリング
エンジニア勉強会 エスキュービズム
 
WKWebViewとUIWebView
Yuki Hirai
 
AngularJSでの非同期処理の話
Yosuke Onoue
 
Vue Router + Vuex
Kei Yagi
 

Viewers also liked (12)

PDF
春のJs祭2015 lt
Yuusuke Takeuchi
 
PDF
いまさら始めてみたRxJS
lion-man
 
PDF
Meteorというフレームワーク
rukiadia
 
PPTX
EcmaScript 仕様書を読もう
彰 村地
 
PDF
翻訳から始めるVue.js 入門
Makoto Chiba
 
PDF
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
松田 千尋
 
PDF
Bootstrapにちょい足しアニメーション@春のJavascript祭り
Masayuki Abe
 
PPTX
Vue 2.0 + Vuex Router & Vuex at Vue.js
Takuya Tejima
 
PDF
最強オブジェクト指向言語 JavaScript 再入門!
Yuji Nojima
 
PDF
JavaScriptによるvideo audio要素のコントロール入門
Yossy Taka
 
PDF
Promiseでコールバック地獄から解放された話
Sota Sugiura
 
PDF
Vue.js with Go
Kazuhiro Kubota
 
春のJs祭2015 lt
Yuusuke Takeuchi
 
いまさら始めてみたRxJS
lion-man
 
Meteorというフレームワーク
rukiadia
 
EcmaScript 仕様書を読もう
彰 村地
 
翻訳から始めるVue.js 入門
Makoto Chiba
 
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
松田 千尋
 
Bootstrapにちょい足しアニメーション@春のJavascript祭り
Masayuki Abe
 
Vue 2.0 + Vuex Router & Vuex at Vue.js
Takuya Tejima
 
最強オブジェクト指向言語 JavaScript 再入門!
Yuji Nojima
 
JavaScriptによるvideo audio要素のコントロール入門
Yossy Taka
 
Promiseでコールバック地獄から解放された話
Sota Sugiura
 
Vue.js with Go
Kazuhiro Kubota
 
Ad

Similar to Start React with Browserify (20)

PDF
React introduntion
YutaShimabukuro
 
PDF
Intoroduction to React.js
Yuto Matsukubo
 
PPTX
SYSTEMI勉強会まとめ資料(React基礎まとめ)
YoshikiWatanabe1
 
PPTX
React入門
GIG inc.
 
PPTX
Reactjs
しくみ製作所
 
PDF
React+TypeScriptもいいぞ
Mitsuru Ogawa
 
PDF
フロントエンド開発入門(React).pdf
KSato2
 
PDF
React.js + Flux入門 #scripty02
Yahoo!デベロッパーネットワーク
 
PPTX
React + Reduxで作る対話AI
Kentaro Tada
 
PDF
React entry
Nobuaki Miura
 
PDF
Let's react
YasuhiroSakai3
 
PPTX
Reactに触れてみた
iPride Co., Ltd.
 
PDF
図とコード例で多分わかる React と flux (工事中)
Teloo
 
PDF
SIROK技術勉強会 #1 「Reactってなんだ?」
Naoyuki Kataoka
 
PDF
Reactとbabelで簡易タスク管理ツール作ってみた
Tsuyoshi Maeda
 
PDF
React vtecx20171025
Shinichiro Takezaki
 
PPTX
Hello, React!! まで導く Reactの基礎
iPride Co., Ltd.
 
PPTX
React way at_eight
Hideharu Okuma
 
PDF
Tide - SmalltalkでSPA
Masashi Umezawa
 
PPTX
Reactつかってみた
Minori Tokuda
 
React introduntion
YutaShimabukuro
 
Intoroduction to React.js
Yuto Matsukubo
 
SYSTEMI勉強会まとめ資料(React基礎まとめ)
YoshikiWatanabe1
 
React入門
GIG inc.
 
React+TypeScriptもいいぞ
Mitsuru Ogawa
 
フロントエンド開発入門(React).pdf
KSato2
 
React.js + Flux入門 #scripty02
Yahoo!デベロッパーネットワーク
 
React + Reduxで作る対話AI
Kentaro Tada
 
React entry
Nobuaki Miura
 
Let's react
YasuhiroSakai3
 
Reactに触れてみた
iPride Co., Ltd.
 
図とコード例で多分わかる React と flux (工事中)
Teloo
 
SIROK技術勉強会 #1 「Reactってなんだ?」
Naoyuki Kataoka
 
Reactとbabelで簡易タスク管理ツール作ってみた
Tsuyoshi Maeda
 
React vtecx20171025
Shinichiro Takezaki
 
Hello, React!! まで導く Reactの基礎
iPride Co., Ltd.
 
React way at_eight
Hideharu Okuma
 
Tide - SmalltalkでSPA
Masashi Umezawa
 
Reactつかってみた
Minori Tokuda
 
Ad

More from Muyuu Fujita (14)

PDF
Hello npm
Muyuu Fujita
 
PDF
Learn ES2015
Muyuu Fujita
 
PDF
Objective Front-End JavaScript
Muyuu Fujita
 
PDF
小規模案件で作られた秘伝のタレ
Muyuu Fujita
 
PDF
閉じタグを超えた先に僕が見た景色とは
Muyuu Fujita
 
PDF
JavaScriptと共に歩いて行く決意をした君へ
Muyuu Fujita
 
PDF
非ガチ勢「よし、Coffee script使おう!」
Muyuu Fujita
 
PDF
あの時AngularJSと出会った僕らは
Muyuu Fujita
 
PDF
デザイナー向け 初めてのPhp ~サイト制作に役立つtips~
Muyuu Fujita
 
PDF
Cssアニメーションとその制御
Muyuu Fujita
 
PDF
WordPressで企業サイトのテーマを作る
Muyuu Fujita
 
KEY
WPerのWPerによるWPerのためのPHP入門
Muyuu Fujita
 
PDF
ノンプログラマのGit入門
Muyuu Fujita
 
PDF
Html5でword pressテーマを作るよ!
Muyuu Fujita
 
Hello npm
Muyuu Fujita
 
Learn ES2015
Muyuu Fujita
 
Objective Front-End JavaScript
Muyuu Fujita
 
小規模案件で作られた秘伝のタレ
Muyuu Fujita
 
閉じタグを超えた先に僕が見た景色とは
Muyuu Fujita
 
JavaScriptと共に歩いて行く決意をした君へ
Muyuu Fujita
 
非ガチ勢「よし、Coffee script使おう!」
Muyuu Fujita
 
あの時AngularJSと出会った僕らは
Muyuu Fujita
 
デザイナー向け 初めてのPhp ~サイト制作に役立つtips~
Muyuu Fujita
 
Cssアニメーションとその制御
Muyuu Fujita
 
WordPressで企業サイトのテーマを作る
Muyuu Fujita
 
WPerのWPerによるWPerのためのPHP入門
Muyuu Fujita
 
ノンプログラマのGit入門
Muyuu Fujita
 
Html5でword pressテーマを作るよ!
Muyuu Fujita
 

Recently uploaded (8)

PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 

Start React with Browserify