Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nedir bu React.js dedikleri

Nedir bu React.js dedikleri

Hamdi Omer Sensoy

July 09, 2015
Tweet

Other Decks in Technology

Transcript

  1. © 2015 VNGRS. Tüm hakları açıktır. #vngrsfrontend FRONTEND TechTalk Series

    Technopark React.js 9 Temmuz, Perşembe H. Ömer Şensoy Frontend Dev. @ VNGRS Nedir bu dedikleri?
  2. #vngrsfrontend Tanışalım… • H. Ömer Şensoy
 End. Mühendisi (Penn State

    ’08)
 Frontend Dev. @ VNGRS (2013 -> …) 2 homer osensoy Twitter Github Frontend Dev? YTÜ Teknopark? Çalışan vs. Öğrenci? React.js bilen? Niyetli? Nasıl duydunuz? Kampüste olan/Dışardan gelen?
  3. #vngrsfrontend Duyuru • 15 Temmuz Çarşamba 12:30 - 13:30
 Frontend

    Techtalk Series #2: 
 MapBox ile
 İnteraktif Haritalar Oluşturmak
 Kayıt: mapboxtalk.eventbrite.com 3
  4. #vngrsfrontend React.js - ne? • Render UI + Respond to

    Events • Çok hızlı arayüz render eden JS kütüphanesi • Separation of Concerns vs. 
 Separation of Technologies • Maintain etme kafası alternatiflerine göre daha kolay (don’t mutate, rerender) 6
  5. #vngrsfrontend React.js - neden? • Frontend’de SPA geliştirmenin en büyük

    sıkıntısı bir kere yükledikten sonra data sürekli değişiklik halinde ve UI’ın buna ayak uydurmalı • Eski dünya ne güzeldi… Php, refresh button • Her data değişikliklerini takip etmek yerine sayfası sil baştan yüklesek??? 8 • performans, form fields, scroll noktası vs.?
  6. #vngrsfrontend React.js - Nasıl? Virtual DOM • Virtual DOM &

    Event System • Her veri güncellemesinde React yeni bir sanal DOM yaratır • değişen veriye göre DOM’da ne olmuş (diff) • Gerçek DOM’da bu hale gelmek için yapılması gereken minimum değişiklik ne? • and batch executes all updates • Performans iPhone UIWebViewlarda 60 fps • En büyük zaman kaybı DOM etkileşiminde • SVG, VML ve <canvas> desteği 9
  7. #vngrsfrontend React.js Onboarding Sıkıntıları • ReactJS bir şeyi çok iyi

    yapıyor. Gerisi sana kalmış… V in MVC • AngularJS gibi full+full framework değil. (opiniated degil) • React.js ile iyi web uygulaması yapmak için React.js’ten fazlası lazım. 10
  8. #vngrsfrontend React.js Onboarding Sonrası • ReactJS bir şeyi çok iyi

    yapıyor. Gerisi sana kalmış… • İstersen AngularJS’in bir parçası olarak kullan (ngReact) • İstersen Modal katmanı olarak Flux mimarisini kullan • İstersen Firebase, Parse vs kullan. • İstersen Routing için Backbone kullan… 11
  9. #vngrsfrontend React.js 101 <html> <head> <title>Selam React</title> </head> <body> <script>

    </script> </body> </html> <script src="https://fb.me/react-0.13.3.min.js"></script> React.render(React.createElement('div', null,'Selam'), document.body)
  10. #vngrsfrontend JSX 16 • Display Logic ve markup birbiriyle o

    kadar beraber çalışıyor ki bunları birbirine karıştırmak aslında gerekiyor. • JSX, HTML yazar gibi JavaScript yazabiliyorsunuz. • Kurallar (reserved keywords) • Dev. Env.’tayken JSXTransformer kullanılabilir. • Production’da preprocessing (ör. Gulp/react-tools) • Linting works too
  11. #vngrsfrontend Components 17 var Board = React.createClass({ }) render :

    function() { } return ( <div className="board">Not Defterim</div> ); className="board" React.render(<Board />, document.getElementById(‘app')); type=“text/jsx“ var Board = React.createClass({displayName: "Board", render : function() { return ( React.createElement("div", {className: "board"}, "Not Defterim") ); } }) React.render(React.createElement(Board), document.getElementById(‘app’)) type=“text/javascript“
  12. #vngrsfrontend Components var App = React.createClass({ render : function() {

    return ( <div> <div className="container-fluid"> <div className="upper-section row"> <Title title={ this.props.data.title } desc={ this.props.data.description } embedLink={ this.props.data.embedLink } /> <Detailstats updateTime={ this.props.data.updateTime } visits={ this.props.data.visits } permission={ this.props.data.permission } publisher={ this.props.data.publisher } source={ this.props.data.source } /> </div> <div className="lower-section"> <Filter /> <Map title={ this.props.data.title } desc={ this.props.data.mapDescription } /> </div> </div> </div> ) } });
  13. #vngrsfrontend Props • props bileşene gönderilen parametrelerin toplandığı nesne •

    render metodundan erişebiliyoruz. 19 var SelamReact = React.createClass({ render: function () { return <div>Selam {this.props.isim}</div> } }) React.render(<SelamReact isim=“H.Omer”/>, document.body)
  14. #vngrsfrontend States • Komponentin içindeki değişimler state üzerinden izleniyor. •

    Değiştiği zaman UI V.DOM’da değişerek
 fark render edilir. • Bu state'in ilk değerini vermek için yazmamız gereken bileşen metodu ise getInitialState. • Bunu yaptıktan sonra artık bu state değişkenine render içerisinde erişebiliyoruz. • Datada değişiklik yapmak istersek setState metodunu kullanıyoruz. • Angular digest loop vs. Reactive states 20
  15. #vngrsfrontend States var Sayac = React.createClass({ }) • Üstün Özgür

    - Makale, React.js'e Giriş getInitialState: function () { return {sayac: 0}; }, artir: function () { var suAnkiSayac = this.state.sayac; this.setState({sayac: suAnkiSayac + 1}); }, render: function () { return ( <div> Sayaca {this.state.sayac} kez tıkladınız <button onClick={this.artir}>Sayaç</button> </div>) }
  16. #vngrsfrontend Composed Components • Case: Aynı verinin hem tablo hemde

    grafikte görüldüğü 2 komponentten oluşan bir ana komponent var. • Birinde seçim yapınca diğeri de değişmeli. 23 Sayaç 1 Sayaç 2 Container
  17. #vngrsfrontend Composed Components 24 Sayaç 1 Container Artır Metodu Azalt

    Metodu Çarp Metodu Böl Metodu s: değer1 s: değer2 Sayaç 2 p: değer1 p: değer2 cb: artır cb: azalt
  18. #vngrsfrontend Events & Callbacks 25 var Sayaclar = React.createClass({ getInitialState:

    function () { return {sayac1: 3, sayac2: 5}; }, sayac1Artir: function () { this.setState({sayac1: this.state.sayac1 + 1, sayac2: this.state.sayac2 - 1}); }, sayac2Artir: function () { this.setState({sayac1: this.state.sayac1 - 1, sayac2: this.state.sayac2 + 1}); }, render: function () { return ( <div> <Sayac sayac={this.state.sayac1} artir={this.sayac1Artir}/> <Sayac sayac={this.state.sayac2} artir={this.sayac2Artir}/> </div>); } })
  19. #vngrsfrontend Events & Callbacks 26 var Sayac = React.createClass({ render:

    function () { return ( <div> Sayaca {this.props.sayac} kez tıkladınız. {10 - this.props.sayac} kez daha tıklamalısınız. <button onClick={this.props.artir}>Sayaç</button> </div>); } });
  20. #vngrsfrontend Özet olarak… • Data ve UI kovalamacası V.DOM ile

    çok daha maintainable ve performanslı bir hale geliyor • Data değişiklikleri one-way ve stateler üzerinden yürüyor. • App = Components (Basic, nested vs.) • Değişen data olabildiğince merkezi bir yerde state olarak tutulmalı. • Alt komponentlere prop olarak aktarılmalı. • Alttakiler bunun değiştiğini parente söylemek isterse callbackler ile parenttaki state değişim fonksiyonlarını trigger etmeli. 27
  21. #vngrsfrontend React Flux • React uygulamaları daha büyüdükçe, veri yönetimi

    için yine Facebook'un duyurduğu Flux kütüphanesi kullanılmakta. 30
  22. #vngrsfrontend Tooling • Chrome Extension, React Developer Tools • HTML

    DOM yapısına benzer şekilde bileşen ağacının görülmesine, bileşenlerin props ve state değişkenlerinin incelenmesi ve değiştirilmesine olanak vermekte. 32
  23. #vngrsfrontend Referanslar • http://facebook.github.io/react/ • Makale - ReactJS Giriş, Üstün

    Özgür
 https://github.com/ustun/reactjs-giris • Lynda.com - Up and Running with React.js • PluralSight - React Fundamentals • Egghead.io - Building a React.js App: Notetaker Introduction 33
  24. #vngrsfrontend Kaynaklar - Video • Youtube, Pete Hunt: React: Rethinking

    best practices
 https://www.youtube.com/watch?v=x7cQ3mrcKaY • Üstün Özgür Videolar
 https://www.youtube.com/user/ustunozgur/videos • F8 Konferans Videoları - https://developers.facebooklive.com/
 Hacker Way: Rethinking Web App Development at Facebook • React.js Conf 28, 29 Ocak 2015
 https://www.youtube.com/playlist?list=PLb0IAmt7-GS1cbw4qonlQztYV1TAW0sCr • React Europe 2, 3 Haziran 2015
 https://www.youtube.com/channel/UCorlLn2oZfgOJ-FUcF2eZ1A • Lynda.com - • FrontendMasters - • PluralSight - • Egghead.io - 35
  25. #vngrsfrontend Kaynaklar • Makale - ReactJS Giriş, Üstün Özgür
 https://github.com/ustun/reactjs-giris

    • Makale, React + Performance = ?
 https://aerotwist.com/blog/react-plus-performance-equals-what/ • Makale, Faster AngularJS Rendering (AngularJS and ReactJS)
 http://www.williambrownstreet.net/blog/2014/04/faster-angularjs-rendering- angularjs-and-reactjs/ 36