start react with browserify
TRANSCRIPT
About meme = { name: "muyuu", Twitter: "@anticyborg", belongs: "freelance", job: "Web Front-End Engineer"};
About Reactvar Hello = React.createClass({ render: function(){ return ( <div className="hello"> Hello World! </div> ); }});
React.render( <Hello />, document.getElementById('helloBox') );
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操作を単純化Reactは「今のデータを元にDOMをレンダリングする」方式var dataList = React.createClass({ render: function(){ var items = this.props.items.map( function(item){ return <li>{item}</li>; } ); return( <ul>{items}</ul> ); }});
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> ); }});
Points• React.createClass() でコンポーネントを作成• renderメソッドにコンポーネントのDOMを記述• propはコンポーネントに渡されるデータ• stateはアプリケーションの状態を持つデータ• stateに変更があった際には再描画される• コンポーネント間で値を受け渡す
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>
Browserify// moduleA.jsmodule.exports = { log: function(){ console.log('it is moduleA'); }};
// moduleB.jsmodule.exports = { log: function(){ console.log('this is moduleB'); }};
Browserify// main.jsvar moduleA = require('moduleA');var moduleB = require('moduleB');
moduleA.log();moduleB.log();// it is moduleA// this is moduleB
Browserifynpm install -g browserifynpm install --save jquerybrowserify main.js -o bundle.js// make bundle.js
React Components with Browserifyvar React = require('react');
var Child = require('./child'); // React componentvar 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も動かしたい
https://github.com/muyuu/searchKindle