Pertukaran data antara komponen Bereaksi menggunakan perpustakaan RxJS

Berikut ini adalah terjemahan dari artikel oleh Chidume Nnamdi yang diterbitkan di blog.bitsrc.io. Terjemahan diterbitkan dengan izin dari penulis.



Munculnya perpustakaan RxJS telah membuka banyak kemungkinan baru di dunia JS. Tujuan dari RxJS adalah untuk mencapai banyak dengan sejumlah kecil kode. Setelah membaca artikel ini, Anda akan belajar cara bertukar data antara komponen aplikasi pada Bereaksi, menggunakan kemampuan RxJS.

Tip : Gunakan Bit untuk mengatur dan berbagi komponen Bereaksi. Ini akan memungkinkan tim Anda untuk mengembangkan aplikasi mereka lebih cepat. Cobalah saja.


Bereaksi Koleksi Komponen

Redux


Pertukaran data antara komponen Bereaksi yang tidak terkait adalah untuk apa perpustakaan negara dibuat. Ada banyak template manajemen negara, tetapi dua yang paling dikenal: Flux dan Redux.

Redux populer karena kesederhanaannya dan penggunaan fitur murni. Memang, berkat mereka, tidak ada keraguan bahwa penggunaan reduksi tidak akan menimbulkan efek samping.

Saat bekerja dengan Redux, hal pertama yang kami lakukan adalah membuat data warehouse terpusat:



Selanjutnya, kami mengaitkan komponen dengan repositori ini dan, jika diinginkan, memperbarui atau menghapus status. Setiap perubahan yang dilakukan pada vault akan tercermin dalam komponen yang terkait dengannya. Dengan demikian, aliran data meluas ke semua komponen, terlepas dari tingkat bersarangnya. Komponen yang terletak di level ke-n dari struktur hierarkis mampu mentransmisikan data ke komponen dengan level tertinggi. Yang terakhir, pada gilirannya, dapat mengirimkan data ke tingkat komponen 21.

Rxjs


Dengan munculnya RxJS, menggunakan perpustakaan manajemen negara menjadi lebih mudah. Banyak yang menyukai pola Observer yang disediakan oleh RxJS.

Kami cukup membuat aliran yang Dapat Observable dan memungkinkan semua komponen untuk mendengarkannya. Jika beberapa komponen ditambahkan ke aliran, komponen pendengar (atau "bertanda tangan") merespons pembaruan DOM.

Instalasi


Kami membuat aplikasi di Bereaksi, menggunakan create-react-app . Jika Anda tidak memiliki create-react-app , maka instal terlebih dahulu secara global:

 npm i create-react-app -g 

Selanjutnya, kami menghasilkan proyek di Bereaksi:

 create-react-app react-prj 

Pergi ke direktori:

 cd react-prj 

Instal perpustakaan rxjs:

 npm i rxjs 

Kita harus memiliki file yang membuat instance baru dari BehaviourSubject .

Mengapa kami menggunakan BehaviorSubject?


BehaviorSubject adalah salah satu Subjek di perpustakaan RxJS. Menjadi komponen anak dari Subjek, BehaviorSubject memungkinkan banyak pengamat untuk mendengarkan streaming, serta acara penyiaran massa untuk pengamat ini. BehaviorSubject menyimpan nilai terakhir dan meneruskannya ke semua komponen yang ditandatangani baru.

Jadi, BehaviorSubject :

  • Mengizinkan pengiriman massal.
  • Ini menyimpan nilai-nilai terbaru yang diterbitkan oleh pelanggan, dan mengirimkan nilai-nilai ini secara massal.



Folder src berisi file messageService.js , yang mengekspor instance BehaviorSubject dan objek messageService ke messageService . Objek pelanggan dibuat di awal file - sehingga tersedia untuk komponen impor apa pun. Objek messageService memiliki fungsi kirim yang menerima parameter msg : itu berisi data yang diperlukan untuk transmisi ke semua komponen mendengarkan. Dalam tubuh fungsi, kita memanggil metode emit . Ini mengirimkan data secara massal ke komponen yang ditandatangani di objek berlangganan.

Misalkan kita memiliki komponen berikut:

  • KonsumenA;
  • KonsumenB;
  • ProduserA;
  • ProduserB.

Dalam struktur hierarkis, mereka terlihat seperti ini:



Komponen aplikasi mengirimkan pesan ProduserA dan ConsumerB. ProducerA mengirimkan data ke ConsumerA, dan pesan dari ConsumerB sampai ke ProducerB.



Komponen ConsumerA dan ConsumerB memiliki penghitung status individu. Dalam metode componentDidMount mereka, mereka subscriber aliran subscriber sama. Segera setelah acara diterbitkan, penghitung diperbarui untuk kedua komponen.

ProduserA dan ProducerB memiliki tombol Increment Counter dan Increment Counter Decrement Counter yang, ketika ditekan, menghasilkan 1 atau -1 . Komponen yang ditandatangani ConsumerA dan ConsumerB mengambil acara dan meluncurkan fungsi panggilan balik mereka, memperbarui nilai penghitung status dan DOM.



Mari kita lihat struktur hierarkis lagi:



ProduserB mentransmisikan data ConsumerA, meskipun sama sekali tidak terkait. ProduserA mentransfer data ke ConsumerB, bukan menjadi komponen induknya. Itulah inti dari RxJS: kami baru saja membuat simpul aliran peristiwa pusat dan membiarkan komponen mendengarkannya. Ketika komponen apa pun menghasilkan peristiwa, komponen mendengarkan segera mengambilnya.

Anda dapat bermain dengan aplikasi di stackblitz: https://react-lwzp6e.stackblitz.io

Kesimpulan


Jadi, kami melihat bagaimana Anda dapat bertukar data antara komponen Bereaksi menggunakan RxJS. Kami menggunakan BehaviourSubject untuk membuat aliran data terpusat, dan kemudian membiarkan komponen lainnya berlangganan aliran ini. Sekarang, ketika salah satu komponen menghasilkan data, komponen lain juga menerimanya. Tingkat komponen dalam struktur hierarkis tidak penting.

Jika Anda memiliki pertanyaan tentang topik ini atau Anda ingin saya menambahkan, memperbaiki atau menghapus sesuatu, tulis tentang itu di komentar, di email atau di pesan pribadi.

Terima kasih atas perhatian anda!

Source: https://habr.com/ru/post/id453310/


All Articles