SlideShare una empresa de Scribd logo
1 de 48
Descargar para leer sin conexión
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やろう

Más contenido relacionado

La actualidad más candente

iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
Kosuke Ogawa
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始め
ynaruta
 
AngularJSでの非同期処理の話
AngularJSでの非同期処理の話AngularJSでの非同期処理の話
AngularJSでの非同期処理の話
Yosuke Onoue
 

La actualidad más candente (20)

5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ
 
iOS WebView App
iOS WebView AppiOS WebView App
iOS WebView App
 
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱い
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始め
 
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティスコンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
 
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
 
2時間で学ぶjQuery
2時間で学ぶjQuery2時間で学ぶjQuery
2時間で学ぶjQuery
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.js
 
let UIWebView as WKWebView
let UIWebView as WKWebViewlet UIWebView as WKWebView
let UIWebView as WKWebView
 
Vue.js 2.0を試してみた
Vue.js 2.0を試してみたVue.js 2.0を試してみた
Vue.js 2.0を試してみた
 
jQuery Mobile 概要
jQuery Mobile 概要jQuery Mobile 概要
jQuery Mobile 概要
 
20160927 reactmeetup
20160927 reactmeetup20160927 reactmeetup
20160927 reactmeetup
 
React Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリングReact Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリング
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebView
 
AngularJSでの非同期処理の話
AngularJSでの非同期処理の話AngularJSでの非同期処理の話
AngularJSでの非同期処理の話
 

Destacado

Destacado (12)

春のJs祭2015 lt
春のJs祭2015 lt春のJs祭2015 lt
春のJs祭2015 lt
 
いまさら始めてみたRxJS
いまさら始めてみたRxJSいまさら始めてみたRxJS
いまさら始めてみたRxJS
 
Meteorというフレームワーク
MeteorというフレームワークMeteorというフレームワーク
Meteorというフレームワーク
 
EcmaScript 仕様書を読もう
EcmaScript 仕様書を読もうEcmaScript 仕様書を読もう
EcmaScript 仕様書を読もう
 
翻訳から始めるVue.js 入門
翻訳から始めるVue.js 入門翻訳から始めるVue.js 入門
翻訳から始めるVue.js 入門
 
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
 
Bootstrapにちょい足しアニメーション@春のJavascript祭り
Bootstrapにちょい足しアニメーション@春のJavascript祭りBootstrapにちょい足しアニメーション@春のJavascript祭り
Bootstrapにちょい足しアニメーション@春のJavascript祭り
 
Vue 2.0 + Vuex Router & Vuex at Vue.js
Vue 2.0 + Vuex Router & Vuex at Vue.jsVue 2.0 + Vuex Router & Vuex at Vue.js
Vue 2.0 + Vuex Router & Vuex at Vue.js
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 
JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門
 
Promiseでコールバック地獄から解放された話
Promiseでコールバック地獄から解放された話Promiseでコールバック地獄から解放された話
Promiseでコールバック地獄から解放された話
 
Vue.js with Go
Vue.js with GoVue.js with Go
Vue.js with Go
 

Similar a Start React with Browserify

DOM Scripting & jQuery
DOM Scripting & jQueryDOM Scripting & jQuery
DOM Scripting & jQuery
smallworkshop
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Akira Inoue
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
cmtomoda
 

Similar a Start React with Browserify (20)

jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
 
マークアップ講座 04 jQuery - JavaScript
マークアップ講座 04 jQuery - JavaScriptマークアップ講座 04 jQuery - JavaScript
マークアップ講座 04 jQuery - JavaScript
 
jQuery Mobile(開発編)勉強会資料
jQuery Mobile(開発編)勉強会資料jQuery Mobile(開発編)勉強会資料
jQuery Mobile(開発編)勉強会資料
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for Design
 
Intoroduction to React.js
Intoroduction to React.jsIntoroduction to React.js
Intoroduction to React.js
 
2012年8月10日 勉強会
2012年8月10日 勉強会2012年8月10日 勉強会
2012年8月10日 勉強会
 
Knockout
KnockoutKnockout
Knockout
 
Webに今求められているレベル: HTML5 コントロールを利用した開発
Webに今求められているレベル: HTML5 コントロールを利用した開発Webに今求められているレベル: HTML5 コントロールを利用した開発
Webに今求められているレベル: HTML5 コントロールを利用した開発
 
jQuery Mobileの基礎
jQuery Mobileの基礎jQuery Mobileの基礎
jQuery Mobileの基礎
 
多分モダンなWebアプリ開発
多分モダンなWebアプリ開発多分モダンなWebアプリ開発
多分モダンなWebアプリ開発
 
DOM Scripting & jQuery
DOM Scripting & jQueryDOM Scripting & jQuery
DOM Scripting & jQuery
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
「その他」のUI Framework 3選
「その他」のUI Framework 3選「その他」のUI Framework 3選
「その他」のUI Framework 3選
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 

Más de Muyuu Fujita

あの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らはあの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らは
Muyuu Fujita
 
Cssアニメーションとその制御
Cssアニメーションとその制御Cssアニメーションとその制御
Cssアニメーションとその制御
Muyuu Fujita
 
Html5でword pressテーマを作るよ!
Html5でword pressテーマを作るよ!Html5でword pressテーマを作るよ!
Html5でword pressテーマを作るよ!
Muyuu Fujita
 

Más de Muyuu Fujita (14)

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

Start React with Browserify