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

React.js'e Giriş

React.js'e Giriş

Facebook'un arayüz geliştirme kütüphanesi React.js ile ilgili JavaScriptAnkara grubunda yaptığım sunum

Üstün Özgür

February 12, 2015
Tweet

More Decks by Üstün Özgür

Other Decks in Programming

Transcript

  1. JavaScript • 10 gün içinde geliştirildi - Eich • "C

    giysili Lisp" - Crockford • Çok esnek, fonksiyonel ve nesne yönelimli • CoffeeScript, ES6, underscore...
  2. Daha Yeni Arayüz Daha Yeni Veri İstemci tabanlı arayüzler f(veri)

    ≠ html t0 t1 t2 Yeni Arayüz Yeni Veri Arayüz ve Veri Zaman
  3. 10 kişi Çevrimiçi 11 kişi Çevrimiçi Tek Veri Değişimi İki

    Görüntü Değişimi Örnek: Chat $('#insanlar').append(htmlYeniKisi)   $('#sayi').text($('#sayi').text  +  1)
  4. Daha Yeni Arayüz Yeni Arayüz Daha Yeni Veri Yeni Veriden

    Yeni Görüntü f(veri) = html t0 t1 t2 Yeni Veri Arayüz Zaman Veri
  5. Temel Felsefe Kullanıcı arayüzün arkasındaki veri yapısına ve değişikliklerine odaklanmalı

    ve bu verinin nasıl görüntüleneceğini yalnızca bir kez tanımlamalı
  6. Basit Bir Bileşen: MerhabaDunya var  MerhabaDunya  =  React.createClass({    

     render:  function  ()  {          return  <div>Merhaba  Dünya</div>;      }   }) React.createElement("div",  null,  "Merhaba  Dünya") JSX
  7. Karmaşık Bir Bileşen: Selamlama var  Selamlama  =  React.createClass({    

     render:  function  ()  {          return  (              <div>                  <MerhabaDunya/>                  <MerhabaDunya/>              </div>)        }   })
  8. Parametreli Bileşenler Çocuk Bileşen Merhaba Ustun isim=Ustun Çocuk Bileşen Merhaba

    Ozgur isim=Ozgur Çocuk Bileşen Merhaba Ali isim=Ali Ana (Tepe) Bileşen
  9. props kullanan MerhabaDunya var  MerhabaDunya  =  React.createClass({      render:

     function  ()  {          return  <div>Merhaba  {this.props.isim}</div>      }   }) JSX React.createElement("div",  null,                "Merhaba",this.props.isim)
  10. var  Selamlama  =  React.createClass({          render:  function

     ()  {              return  <div>                    <MerhabaDunya  isim="Üstün"/>                    <MerhabaDunya  isim="Özgür"/>                </div>            }   })
  11. var Sayac = React.createClass({ getInitialState: function () { return {sayac:

    0}; }, render: function () { <div>Sayaca {this.state.sayac} kez tıkladınız</div> } })
  12. var Sayac = React.createClass({ getInitialState: function () { return {sayac:

    0}; }, render: function () { return (<div> Sayaca {this.state.sayac} kez tıkladınız <button>Sayaç</button> </div>); } })
  13. var Sayac = React.createClass({ getInitialState: function () { return {sayac:

    0}; }, artir: function () { // Buraya ne yazmalıyız? }, render: function () { return ( <div> Sayaca {this.state.sayac} kez tıkladınız <button onClick={this.artir}>Sayaç</button> </div>; } })
  14. var Sayac = React.createClass({ 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>) } }) setState!
  15. Bütün state (veri) değişimleri açık seçik • AngularJS'te veri değişimi

    • Digest loop • Büyük uygulamalarda yavaşlık • Uygulamanın nasıl çalıştığının zor anlaşılması
  16. Kaynak veri vs. İşlenmiş veri • Tek sayaç değeri: tek

    bir state değişkeni • İki görüntü değeri: işlenmiş veri • render'da state değişkeni ile hesapla
  17. var Sayac = React.createClass({ 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. {10 - this.state.sayac} kez daha tıklamalısınız. <button onClick={this.artir}>Sayaç</button> </div> ); } Tek değişiklik
  18. Ana Bileşen-Çocuk Bileşen Haberleşmesi Çocuk Bileşen Sayı: 5 sayi=5 Ana

    (Tepe) Bileşen sayiyiArtir sayi=6 Sayi=6 Click state sayı=5 props sayı=5 props sayı=6 state sayı=6
  19. Sayaç 1: 3 kez tıkladın Sayaç 2: 5 kez tıkladın

    Sayaçlar state: sayac1: 0 sayac2: 5 props: sayac: 0 props: sayac: 5
  20. 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>); } }) 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>); } })
  21. 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>); } })
  22. Diğer Önemli Konular • React Native ile iPhone ve Android

    uygulamaları • node.js ile sunucu tabanlı çalıştırma • Geliştirme esnasında Chrome eklentisi DevTools • Büyük uygulamalar için Facebook'un Flux kütüphanesi
  23. Sonuç • Bütün veri değişiklikleri açık seçik • Uygulamalar bileşenlere

    ayrılmış durumda • Veri-görüntü senkronizasyon için sürekli yeniden görüntü oluşturma - Sanal DOM