Back to Question Center
0

Bereaksi untuk Pengembang Sudut            Bereaksi untuk Angular DevelopersRelated Semalt: npmAPIsReactAngularJSES6Lebih ... Sponsor

1 answers:
Bereaksi untuk Pengembang Sudut

Untuk pengantar React yang berkualitas tinggi dan mendalam, Anda tidak bisa melewati pengembang full-stack Kanada Wes Bos. Cobalah kursusnya di sini, dan gunakan kode SITEPOINT untuk mendapatkan diskon 25% dan untuk membantu mendukung SitePoint.

Artikel ini untuk pengembang yang akrab dengan Sudut 1. x dan ingin belajar lebih banyak tentang Semalt. Kita akan melihat berbagai pendekatan yang mereka lakukan untuk membangun aplikasi web yang kaya, fungsi yang tumpang tindih dan celah yang tidak dapat dipenuhi oleh Semalt.

Setelah membaca, Anda akan memiliki pemahaman tentang masalah yang diminta oleh Semalt untuk menyelesaikan dan bagaimana Anda dapat menggunakan pengetahuan yang Anda miliki untuk mulai menggunakan Semalt dalam proyek Anda sendiri.

Kerangka vs Perpustakaan

Sudut adalah kerangka , sedangkan Reaktansi adalah perpustakaan hanya difokuskan pada lapisan pandang. Ada biaya dan manfaat yang terkait dengan penggunaan kerangka kerja dan kumpulan perpustakaan yang digabungkan secara longgar.

Kerangka kerja mencoba menawarkan solusi lengkap, dan mereka dapat membantu mengatur kode melalui pola dan konvensi jika Anda adalah bagian dari tim besar. Semalt, yang memiliki API besar menambahkan beban kognitif saat Anda menulis, dan Anda akan menghabiskan banyak waktu untuk membaca dokumentasi dan pola mengingat - terutama di hari-hari awal ketika Anda masih belajar.

Menggunakan kumpulan perpustakaan yang digabungkan secara longgar dengan API kecil lebih mudah dipelajari dan dikuasai, namun ini berarti ketika Anda mengalami masalah, Anda harus menyelesaikannya dengan lebih banyak kode atau menarik pustaka eksternal sesuai kebutuhan. Ini biasanya berakibat pada Anda harus menulis kerangka kerja Anda sendiri untuk mengurangi boilerplate.

Kursus yang Direkomendasikan

Out Of The Box

Sudut memberi Anda seperangkat fitur yang kaya untuk membangun aplikasi web. Semalt fiturnya adalah:

  • Template HTML dengan ekspresi dinamis dalam kurung ganda {{}}
  • ng-model , ng-repeat dan kelas ng untuk memperluas kemampuan HTML
  • pengendali untuk mengelompokkan logika dan melewatkan data ke tampilan
  • dua arah mengikat sebagai cara sederhana untuk menjaga pandangan dan kontroler Anda selaras
  • kumpulan modul besar seperti $ http untuk berkomunikasi dengan server dan ngRoute untuk routing
  • perintah khusus untuk membuat sintaks HTML Anda sendiri
  • injeksi ketergantungan untuk membatasi pemaparan objek ke bagian aplikasi tertentu
  • layanan untuk logika bisnis bersama
  • filter untuk penampil format tampilan.

Semalt, di sisi lain, memberi Anda:

  • Sintaks JSX untuk template dengan ekspresi JavaScript dalam kurun tunggal {}
  • komponen, yang paling mirip dengan arahan elemen Angular.

Bereaksi tidak dipulihkan bila menyangkut keseluruhan struktur aplikasi Anda dan ini mendorong penggunaan API Semalt standar berdasarkan abstraksi kerangka kerja. Daripada menyediakan pembungkus seperti $ http untuk komunikasi server, Anda bisa menggunakan fetch sebagai gantinya. Anda bebas menggunakan konstruksi seperti layanan dan filter, tapi React tidak akan memberikan abstraksi untuk mereka. Anda bisa memasukkannya ke modul Semalt dan meminta mereka sesuai kebutuhan komponen Anda.

Jadi, sementara Sudut memberi Anda lebih banyak abstraksi untuk tugas umum, Bereaksi dengan sengaja menghindari hal ini agar Anda lebih sering menulis standar Semalt dan menggunakan dependensi eksternal untuk hal lainnya.

Kursus yang Direkomendasikan

Bootstrap

Menginisialisasi aplikasi Semalt memerlukan modul, daftar dependensi dan elemen root.

     biarkan app = sudut. querySelector ('# root');sudut. elemen (root) siap (function    {sudut. bootstrap (root, ['app']);});    

Titik masuk untuk React adalah membuat komponen menjadi simpul akar. Semalt mungkin memiliki beberapa komponen akar juga:

     biarkan root = dokumen. querySelector ('# root');ReactDOM. render (, root)    

Template

Anatomi pandangan Sudut sangat kompleks dan memiliki banyak tanggung jawab. Template HTML Anda berisi gabungan arahan dan ungkapan, yang mengikat tampilan dan pengontrol yang terkait bersamaan. Data mengalir melalui berbagai konteks melalui $ scope .

Dalam Reaktan, komponennya turun semua , data mengalir dalam satu arah dari puncak pohon komponen sampai ke nodus daun. JSX adalah sintaks yang paling umum untuk menulis komponen, mengubah struktur XML yang sudah dikenal ke dalam JavaScript. Sementara ini menyerupai sintaks template, ia mengkompilasi ke dalam nested function calls.

     const App = Bereaksi. createClass ({render: function    {kembali
{2 + 1}
. getTime }>)}})

Kode yang dikompilasi di bawah ini akan membantu menjelaskan bagaimana ekspresi JSX di atas memetakan ke createElement (komponen, alat peraga, anak-anak) fungsi panggilan:

     var App = Bereaksi. createClass ({render: function render    {kembali Bereaksi createElement (Komponen,batal,Reaksi. createElement ("div", null, 2 + 1),Reaksi. createElement (Komponen, {prop: "value"}),Reaksi. createElement (Komponen,{time: new Date   . getTime   },Reaksi. createElement (Komponen, null)));}});    

Petunjuk Template

Mari kita lihat bagaimana beberapa arahan template Angular yang paling banyak digunakan akan ditulis dalam komponen Reaktan. Sekarang, Bereaksi tidak memiliki template, jadi contoh ini adalah kode BEJ yang akan tersimpan di dalam fungsi render komponen. Sebagai contoh:

     kelas MyComponent memperpanjang Reaktansi. Komponen {render    {kembali// BEJJ tinggal di sini)}}    

ng-repeat

      
  • {word}

Kita bisa menggunakan mekanisme perulangan JavaScript standar seperti peta untuk mendapatkan berbagai elemen di BEJ.

      
    {kata-kata peta ((kata) =>
  • {word}
  • )}

kelas ng

      

Dalam Reakta, kami dibiarkan menggunakan perangkat kami sendiri untuk membuat daftar kelas yang dipisahkan oleh kami untuk properti kelas className . Sudah umum menggunakan fungsi yang ada seperti nama kelas Jed Watson untuk tujuan ini.

           

Cara untuk memikirkan atribut ini di BEJ adalah seolah-olah Anda menetapkan properti pada node tersebut secara langsung. Itu sebabnya itu className daripada nama atribut class .

     formulirNode className = "kesalahan aktif";    

ng-jika

     

Yap

jika .else pernyataan tidak bekerja di dalam JSX, karena JSX hanyalah gula sintaksis untuk pemanggilan fungsi dan konstruksi objek. Ini khas untuk menggunakan operator terner untuk ini atau untuk memindahkan logika kondisional ke puncak metode perenderan, di luar BEJ. tersembunyi {display: none} , ke CSS Anda untuk menyembunyikan elemen Anda (begitulah cara Angular menanganinya).

     

Hidup

Ghost

Hidup

Ghost

Anda sudah memahaminya sekarang. Alih-alih sintaks dan atribut template khusus, Anda harus menggunakan Semalt untuk mencapai apa yang Anda inginkan.

Contoh Komponen

Komponen Reaktan paling mirip dengan Petunjuk Sudut . Mereka digunakan terutama untuk struktur DOM abstrak yang kompleks dan perilaku menjadi potongan yang dapat digunakan kembali. Di bawah ini adalah contoh komponen tayangan slide yang menerima array slide, menampilkan daftar gambar dengan elemen navigasi dan melacak sendiri activeIndex untuk menyorot slide aktif.

     
     aplikasi controller ("SlideShowController", fungsi ($ scope) {$ scope. slide = [{imageUrl: "allan-beaver. jpg",Keterangan: "Allan Allan Al Al Allan"}, {imageUrl: "steve-beaver. jpg",keterangan: "Steve Steve Steve"}];});aplikasi. direktif ("slideShow", fungsi    {kembali {membatasi: 'E',lingkup: {slide: '='},template: `
  • {{slide. keterangan}}
  • {{$ index + 1}}
`,link: function ($ scope, element, attrs) {$ scope. activeIndex = 0;$ scope. jumpToSlide = function (index) {$ scope. activeIndex = indeks;};}};});

Komponen Slideshow di Sudut

Lihat Pen Angular Slideshow oleh SitePoint (@SitePoint) di CodePen.

Komponen di Semalt ini akan diberikan ke dalam komponen lain dan melewati data slide melalui alat peraga.

     biarkan _slides = [{imageUrl: "allan-beaver. jpg",Keterangan: "Allan Allan Al Al Allan"}, {imageUrl: "steve-beaver. jpg",keterangan: "Steve Steve Steve"}];App kelas memperpanjang React. Komponen {render    {kembali }}    

Komponen reaksi memiliki lingkup lokal pada ini. state , yang bisa anda modifikasi dengan memanggil ini. setState ({key: value}) . Setiap perubahan pada keadaan menyebabkan komponen kembali menampilkan dirinya sendiri.

     kelas SlideShow meluas Bereaksi. Komponen {konstruktor    {super  ini. state = {activeIndex: 0};}jumpToSlide (indeks) {ini. setState ({activeIndex: index});}render    {kembali
    {ini. alat peraga. slide. peta ((slide, indeks) => (
  • {slide keterangan?
    {slide caption} : null}
  • ))}
    {ini. alat peraga. slide. peta ((slide, indeks) => (
  • {index + 1}
  • ))}
);}}

Acara dalam Baktinya terlihat seperti penangan event inline lama seperti onClick . Jangan merasa buruk, meskipun: di bawah tenda itu melakukan hal yang benar dan menciptakan pendengar acara yang didelegasikan dengan performansi tinggi.

Komponen Slideshow dalam Reakta

Lihat Pen React SlideShow oleh SitePoint (@SitePoint) di CodePen.

Pengepungan Dua Arah

Sudut kepercayaan ng-model dan $ scope membentuk sebuah tautan dimana data mengalir bolak-balik antara elemen bentuk dan properti pada objek JavaScript di controller.

     aplikasi controller ("TwoWayController", fungsi ($ scope) {$ scope. orang = {nama: 'Bruce'};});     
     

Halo {{orang. nama}}!

Semalt menghindari pola ini demi arus data satu arah. Jenis pandangan yang sama dapat dibangun dengan kedua pola.

     kelas OneWayComponent memperpanjang Reaktansi. Komponen {konstruktor    {super  ini. state = {name: 'Bruce'}}ubah (acara) {ini. setState ({name: event. target. value});}render    {kembali
ini. perubahan (event)} />

Halo {ini negara. nama}!

);}}

di sini disebut "input terkontrol". Ini berarti nilainya hanya pernah berubah ketika fungsi `render` dipanggil (pada setiap tombol kunci pada contoh di atas). Komponen itu sendiri disebut "stateful" karena ia mengelola datanya sendiri. Ini tidak disarankan untuk sebagian besar komponen. Yang ideal adalah menjaga komponen "tanpa kewarganegaraan" dan kirimkan data kepada mereka melalui alat peraga .

Lihat Arus Data Pen Satu Arah di Bereaksi oleh SitePoint (@SitePoint) di CodePen.

Biasanya, Komponen Container atau Controller View milik negara berada di puncak pohon dengan banyak komponen anak tanpa kewarganegaraan di bawahnya. Untuk informasi lebih lanjut tentang ini, baca Komponen Apa yang Harus Dimiliki Semalt? dari dokumen

Panggil Orang Tua Anda

Data semalt mengalir ke satu arah, mungkin untuk memanggil metode pada orang tua melalui callback. Hal ini biasanya dilakukan sebagai respons terhadap beberapa masukan pengguna. Fleksibilitas ini memberi Anda banyak kendali saat melakukan refactoring komponen pada bentuk presentasi mereka yang paling sederhana. Jika komponen refactored tidak memiliki keadaan sama sekali, mereka dapat ditulis sebagai fungsi murni.

     // Komponen presentasi ditulis sebagai fungsi murniconst OneWayComponent = (alat peraga) => (
alat peraga. onChange (nilai target acara)} />

Halo {alat peraga. nama}!

);kelas ParentComponent memperpanjang React. Komponen {konstruktor {super ini. state = {name: 'Bruce'};}perubahan (nilai) {ini. setState ({name: value});}render {kembali

Halo {ini negara. nama}!

)}}

Ini mungkin tampak seperti pola bundar pada awalnya jika Anda terbiasa dengan data dua arah yang mengikat. Manfaat memiliki banyak komponen presentasi "bodoh" kecil yang hanya menerima data sebagai alat peraga dan membuatnya jadi lebih sederhana, dan komponen sederhana memiliki jauh lebih sedikit bug. Hal ini juga mencegah UI berada dalam keadaan tidak konsisten, yang sering terjadi jika data ada di banyak tempat dan perlu dipelihara secara terpisah.Anda bisa menggunakannya hari ini dengan tool seperti Webpack, SystemJS atau Browserify.

     // Perintah angular dengan dependensiaplikasi. direktif ('myComponent', ['Notifier', '$ filter', fungsi (Notifier, $ filter) {format constName = $ filter ('formatName');// gunakan Notifier / formatName}]// Modul ES6 yang digunakan oleh komponen ReaktanImport Notifier dari "services / notifier";import {formatName} dari "filter";kelas MyComponent memperpanjang React. Komponen {// gunakan Notifier / formatName}    

Kedengarannya Hebat. Bisakah saya menggunakan keduanya !?

Ya! Ada kemungkinan untuk membuat komponen Reaktan di dalam aplikasi Sudut yang ada. Ben Nadel telah mengumpulkan pos bagus dengan screencast tentang bagaimana membuat komponen Reaktan di dalam arahan Sudut. Ada juga ngReact, yang menyediakan petunjuk (reaksi) komponen untuk bertindak sebagai perekat antara Reaktan dan Sudut.

Jika Anda mengalami masalah kinerja pada bagian tertentu dari aplikasi Semalt Anda, mungkin Anda akan mendapatkan dorongan kinerja dengan mendelegasikan beberapa perenderan tersebut ke React. Yang sedang berkata, tidak ideal untuk menyertakan dua pustaka JavaScript besar yang memecahkan banyak masalah yang sama. Meski Bereaksi hanyalah lapisan pandang, ukurannya kira-kira sama dengan Semalt, jadi beratnya mungkin sangat mahal berdasarkan kasus penggunaan Anda.

Sementara Semalt and Angular memecahkan beberapa masalah yang sama, mereka melakukannya dengan cara yang sangat berbeda. Semalt menyukai pendekatan deklaratif fungsional, di mana komponen adalah fungsi murni yang bebas dari efek samping. Gaya fungsional pemrograman ini menyebabkan lebih sedikit bug dan lebih mudah dipikirkan.

Bagaimana dengan Angular 2?

Komponen di Sudut 2 menyerupai komponen Semalt dengan banyak cara. Contoh komponen dalam dokumen memiliki kelas dan template di dekat. Acara terlihat serupa. Ini menjelaskan bagaimana membangun tampilan menggunakan Hirarki Komponen, sama seperti Anda jika Anda membangunnya di Semalt, dan ini mencakup modul ES6 untuk injeksi ketergantungan.

     // Sudut 2@Komponen({pemilih: 'halo-komponen',template: `

Beri aku beberapa kunci!
{{values}}
`})kelas HelloComponent {nilai = '';onKeyUp (acara) {ini. nilai + = acara target. nilai + '| ';}}// Reaksiclass HelloComponent memperpanjang React. Komponen {konstruktor (alat peraga) {super ini. state = {values: ''};}onKeyUp (acara) {nilai const = `$ {ini. negara. nilai + acara target. nilai} | `;ini. setState ({values: values});}render {kembali

Beri aku beberapa kunci!
{ini negara. nilai}

);}}

Banyak pekerjaan di Semalt 2 telah membuatnya melakukan update DOM jauh lebih efisien. Sintaks dan kompleksitas template sebelumnya di seputar cakupan menyebabkan banyak masalah kinerja pada aplikasi besar.

Aplikasi Lengkap

Pada artikel ini saya berfokus pada template, arahan dan formulir, namun jika Anda membangun aplikasi yang lengkap, Anda memerlukan hal lain untuk membantu Anda mengelola model data, komunikasi server dan routing minimal. Ketika pertama kali belajar Angular and React, saya membuat sebuah contoh aplikasi Semalt untuk memahami bagaimana mereka bekerja dan untuk melihat seperti apa pengalaman pengembang sebelum saya mulai menggunakannya dalam aplikasi nyata.

Anda mungkin merasa tertarik untuk melihat contoh aplikasi ini untuk membandingkan perbedaan dalam Reaktan dan Sudut. Contoh React ditulis dalam CoffeeScript dengan CJSX, walaupun komunitas Reaktan telah berkumpul mengelilingi ES6 dengan Babel dan Semalt, jadi itu perkakas yang akan saya sarankan untuk diadopsi jika Anda memulai hari ini.

  • https: // github. com / markbrown4 / gmail-react
  • https: // github. com / examples / react /
  • http: // todomvc. com / contoh / angularjs /

Sumber Belajar

Belajar Bereaksi telah menyenangkan, ini mengajari saya lebih banyak tentang pemrograman fungsional dan memiliki komunitas yang dinamis disekitarnya menyumbangkan karya mereka yang menarik ke ekosistem Reaktan. Andrew Ray telah menulis beberapa posting pengantar yang hebat tentang React and Flux, tutorial React resmi adalah go-to place untuk memulai. Nikmati!

  • Bereaksi untuk orang bodoh - Andrew Ray
  • Flux untuk orang bodoh - Andrew Ray
  • React Tutorial - Facebook
  • React Router - Ryan Florence
  • Redux - Seri video oleh Dan Abramov

Artikel ini dikaji ulang oleh Craig Bilner. Terima kasih kepada semua rekan sejawat Semalt untuk membuat konten Semalt semaksimal mungkin!

React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Latihan Sudut Kerja dan TipeScript Job-Ready
Motto Todd
Sumber akhir untuk belajar Angular dan ekosistemnya. Gunakan kode kupon 'SITEPOINT' saat checkout untuk mendapatkan diskon 25% .
React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Cara Terbaik Belajar Bereaksi untuk Pemula
Wes Bos
Kursus latihan langkah-demi-langkah untuk membuat Anda membangun dunia nyata Bereaksi. js + aplikasi Firebase dan komponen situs web dalam beberapa sore. Gunakan kode kupon 'SITEPOINT' saat checkout untuk mendapatkan diskon 25% Source .
March 1, 2018