Dalam artikel sebelumnya, kami telah membincangkan sebab pengkapsulan data ialah ciri utama komponen web yang direka bentuk dengan baik. Komponen web, sebagai struktur serba lengkap, harus meminimumkan kebergantungan luaran untuk memastikan kemudahan penggunaan, mudah alih dan ujian. Walau bagaimanapun, enkapsulasi ini memberikan cabaran baharu kepada pembangun: jika komponen "diasingkan", bagaimanakah ia boleh dimulakan menggunakan data luaran?
Soalan ini membuka pelbagai cabaran menarik yang berkaitan dengan menghantar data ke dalam komponen web. Bersedia — ia akan menjadi terlalu membosankan, seperti yang anda suka!
Memulakan komponen web ialah proses menyediakan elemen tersuai untuk berfungsi dalam aplikasi web. Secara ringkas, ia melibatkan penciptaan contoh kelas yang didaftarkan dengan kaedah customElements.define dan menjalankan kod yang ditakrifkan dalam kaedah kitaran hayat komponen, seperti pembina dan connectedCallback.
Seperti yang kita bincangkan dalam artikel sebelumnya, semasa pemulaan, komponen mesti menetapkan keadaan setempatnya — pada asasnya, objek data yang akan berfungsi dengannya. Objek ini boleh diisi dengan nilai lalai, tetapi lebih kerap daripada tidak, data luaran diperlukan untuk mengisinya.
Entah bagaimana komponen mesti menerima data luaran ini, bermakna data itu perlu disimpan di suatu tempat dari mula. Data ini dihantar ke komponen pada peringkat permulaan. Akibatnya, komponen memerlukan persekitaran khusus yang mengendalikan penyediaan, penyimpanan dan pemindahan data, serta memulakan proses pemulaan itu sendiri.
Kes permulaan yang paling mudah adalah untuk komponen autonomi. Komponen autonomi adalah bebas daripada sebarang persekitaran atau faktor luaran, menjadikannya sangat serba boleh. Ia boleh disepadukan ke dalam mana-mana bahagian dokumen — sama ada halaman dengan struktur minimum atau pun kosong sepenuhnya. Pendekatan ini memudahkan pembangunan dengan ketara kerana anda tidak perlu mengambil kira butiran persekitaran luaran dan ujian menjadi lebih mudah. Pembangun boleh mengasingkan komponen dan mengujinya dalam persekitaran yang bersih tanpa perlu mencipta semula konteks. Ini bukan sahaja menjimatkan masa, malah ia juga menghapuskan potensi risiko yang mungkin timbul daripada perubahan dalam persekitaran yang mungkin menjejaskan fungsi komponen.
Walau bagaimanapun, kebanyakan komponen melaksanakan tugas yang lebih kompleks, termasuk berinteraksi dengan elemen lain atau sumber data luaran. Untuk ini, mereka memerlukan persekitaran. Dalam kes sedemikian, adalah penting bahawa persekitaran mengekalkan kesederhanaan yang mungkin. Akhirnya, pembangun menyasarkan untuk menggabungkan kelebihan komponen autonomi dengan keupayaan untuk berfungsi dalam sistem yang lebih kompleks. Ini boleh dicapai dengan memastikan persekitaran kekal ringan dan mesra pengguna yang mungkin, menghampiri kesederhanaan yang diperlukan untuk komponen autonomi.
Jadi, apakah ciri-ciri yang perlu ada pada persekitaran sedemikian? Persekitaran yang mudah ialah persekitaran yang boleh disediakan dengan cepat, dengan usaha yang minimum. Untuk perkara ini berlaku, ia harus difahami, padat dan biasa kepada pembangun. Apabila pembangun menghadapi tugas yang memerlukan jumlah tindakan yang minimum dan menggunakan pendekatan dan piawaian yang diterima secara meluas, kerja itu menjadi lebih mudah dan cepat untuk diselesaikan.
Sebagai contoh, jika anda memprogramkan komponen web, anda akan segera memahami perkara yang dilakukan oleh kod berikut. Anda boleh sama ada mengulanginya daripada ingatan atau hanya menyalin dan menampalnya ke dalam projek anda tanpa membuang banyak masa.
<script> class SomeComponent extends HTMLElement { connectedCallback() { } } customElements.define("some-component", SomeComponent); </script> <some-component></some-component>
Itulah sebabnya ciri utama persekitaran yang ringkas ialah penggunaan istilah standard dan pendekatan yang diterima pakai secara meluas. Semakin dekat kod anda dengan piawaian, semakin mudah untuk difahami, digunakan dan digunakan.
Mari kita mendalami topik meletakkan komponen dalam persekitaran. Apakah sebenarnya yang kami maksudkan dengan "penempatan"? Di sini, kami merujuk kepada semua yang berkaitan dengan kedudukan: ini mungkin melibatkan meletakkan fail modul komponen, kod JavaScript komponen itu sendiri atau teg HTML yang menambahkan komponen pada halaman. Tidak kira apa yang kami letakkan, peraturan peletakan adalah jelas, boleh difahami dan tidak memerlukan syarat yang rumit untuk dipatuhi.
Untuk memahami sebab ini sangat penting, mari lihat contoh biasa daripada penanda HTML standard. Kami tahu bahawa teg li biasanya harus berada di dalam teg ul. Tetapi apa yang berlaku jika kita meletakkan li di dalam div? Atau, sebaliknya, jika kita meletakkan div di dalam ul, dan meletakkan li di dalam div? Berikut ialah contoh struktur sedemikian:
<ul> <div> <li></li> <li></li> </div> </ul>
Pada pandangan pertama, ini mungkin kelihatan seperti kesilapan kecil, tetapi pelanggaran peraturan seperti ini boleh membawa kepada akibat yang tidak dijangka. kenapa? Kerana spesifikasi HTML dengan jelas mentakrifkan peraturan untuk penempatan elemen tertentu secara relatif antara satu sama lain. Ini menimbulkan soalan dan kekeliruan tambahan, walaupun dengan tag yang terkenal.
Sekarang, bayangkan bahawa kami menetapkan peraturan yang ketat untuk meletakkan komponen kami dalam persekitaran. Ini boleh menimbulkan lebih banyak soalan untuk pembangun, terutamanya bagi mereka yang baru mula bekerja dengan komponen kami. Sebagai contoh, adakah komponen hanya perlu diletakkan di bahagian tertentu halaman? Adakah elemen jirannya perlu mengikut syarat tertentu? Mempunyai peraturan peletakan yang ketat boleh menyukarkan bekerja dengan komponen.
Daripada ini, kita boleh membuat kesimpulan penting: persekitaran akan menjadi lebih mudah, dan komponen lebih mesra pengguna, jika penggunaannya tidak bergantung pada keperluan peletakan yang ketat. Sebaik-baiknya, komponen hendaklah cukup fleksibel untuk diletakkan di mana-mana pada halaman tanpa sebarang syarat tambahan.
Semakin kompleks komposisi persekitaran, semakin tinggi kerumitan keseluruhannya. Ini jelas: melakukan satu operasi sentiasa lebih mudah daripada melakukan beberapa. Setiap operasi tambahan meningkatkan kemungkinan ralat, sama ada tindakan yang terlupa atau langkah yang tidak dilaksanakan dengan betul. Tambahan pula, lebih banyak langkah yang terlibat dalam sesuatu proses, lebih banyak masa yang diperlukan, yang menjejaskan prestasi keseluruhan.
Mari kita lihat perkara ini dalam konteks bekerja dengan komponen. Apabila komponen memerlukan hanya satu atribut untuk ditentukan, bekerja dengannya adalah mudah dan intuitif. Walau bagaimanapun, apabila komponen memerlukan menetapkan lima atribut sekaligus, tugasan menjadi lebih sukar. Ia lebih rumit jika nilai sesetengah atribut bergantung pada yang lain. Saling bergantung ini meningkatkan kemungkinan ralat dan memerlukan lebih perhatian daripada pembangun.
Sebagai contoh, saya pernah bekerja dengan komponen yang memerlukan penetapan nilai awal dan nilai sempadan. Walaupun nilai sempadan mempunyai nilai lalai, saya sering terlupa bahawa ia mungkin tidak sesuai untuk projek tertentu. Ini membawa kepada ralat yang perlu diperbaiki dengan kembali ke dokumentasi atau menyemak semula kod. Berikut ialah contoh kod komponen sedemikian:
<script> class SomeComponent extends HTMLElement { connectedCallback() { } } customElements.define("some-component", SomeComponent); </script> <some-component></some-component>
Di sini anda boleh melihat bahawa atribut maximum_value mempunyai nilai lalai, tetapi ia juga boleh ditetapkan secara eksplisit. Walau bagaimanapun, dalam projek dunia sebenar, nilai lalai tidak selalu memenuhi keperluan semasa. Jika perkara ini terlepas pandang, ralat boleh berlaku yang tidak dapat dilihat dengan segera.
Daripada ini, kesimpulan penting boleh dibuat: semakin sedikit bahagian yang dimiliki oleh persekitaran, semakin mudah untuk digunakan. Setiap elemen baharu menambah kerumitan, jadi meminimumkan bilangan konfigurasi dan kebergantungan yang diperlukan membantu menjadikan proses lebih mudah difahami, mudah dan cekap. Reka bentuk persekitaran dengan cara yang memerlukan tindakan minimum daripada pengguna untuk bermula dan anda akan memudahkan penggunaannya dengan ketara.
Mari kita pertimbangkan situasi di mana komponen perlu berinteraksi dengan persekitarannya semasa permulaan. Untuk berbuat demikian, komponen mesti mempunyai keupayaan untuk mengakses persekitaran — sama ada pembolehubah, objek atau peristiwa. Walau bagaimanapun, untuk interaksi sedemikian berjaya, komponen mesti "mengetahui" persekitarannya, atau lebih tepat lagi, mempunyai cara yang jelas untuk mengenal pastinya.
Contoh mudah: mari kita anggap komponen perlu mendapatkan semula kandungan elemen lain. Ini boleh dilakukan seperti berikut:
<script> class SomeComponent extends HTMLElement { connectedCallback() { } } customElements.define("some-component", SomeComponent); </script> <some-component></some-component>
Dalam kes ini, komponen akan sentiasa menggunakan nilai pembolehubah global_const, tanpa mengira persekitarannya. Ini mewujudkan pergantungan tegar pada keadaan global dan merumitkan proses penyesuaian. Jika anda perlu menukar gelagat komponen, anda perlu mengedit kod atau mengubah suai pembolehubah global, yang tidak selalunya mudah atau selamat.
Jadi, kesimpulan penting ialah ini: persekitaran menjadi lebih ringkas dan lebih mudah jika ia menyediakan komponen dengan keupayaan untuk bekerja dengan nama yang mudah diganti.
Apabila komponen berinteraksi dengan persekitarannya, tanggungjawab utama untuk ketepatan proses ini terletak pada komponen itu sendiri. Komponen adalah yang mesti menggunakan nama untuk mengakses data yang diperlukan. Walau bagaimanapun, persekitaran juga memainkan peranan penting: ia mesti menyediakan data dengan cara yang memudahkan komponen untuk digunakan.
Mari kita pertimbangkan contoh daripada kod sebelumnya, di mana komponen mengakses terus pembolehubah global. Dalam kes ini, menukar nama persekitaran menjadi sangat sukar kerana komponen itu digandingkan rapat dengan pembolehubah tertentu. Jika pembolehubah yang berbeza diperlukan, kod komponen mesti ditulis semula. Ini bukan sahaja menyusahkan tetapi juga mengurangkan fleksibiliti dan kebolehgunaan semula komponen.
Sekarang, mari kita perbaiki sedikit pendekatan:
<ul> <div> <li></li> <li></li> </div> </ul>
Dalam versi ini, komponen mendapat nama pembolehubah melalui atribut const_name. Ini memberikan lebih fleksibiliti: untuk menggunakan pembolehubah yang berbeza, cukup untuk menghantar nama baharu melalui atribut. Sudah tentu, menggunakan kaedah eval bukanlah penyelesaian yang ideal. Ia membawa potensi risiko keselamatan dan boleh mengurangkan prestasi. Walau bagaimanapun, pendekatan ini juga menunjukkan cara perubahan persekitaran boleh dipermudahkan dengan menyediakan komponen dengan cara yang lebih mudah untuk mengakses data.
Ini membawa kepada satu lagi peraturan penting: persekitaran menjadi lebih mudah jika ia menawarkan komponen cara yang mudah dan mudah difahami untuk mengakses data.
Dalam artikel ini, saya telah cuba merangkumi kriteria utama yang membantu menilai kesederhanaan persekitaran untuk memulakan komponen web. Kriteria ini bukan sahaja membantu untuk memahami betapa mudahnya untuk bekerja dengan komponen tetapi juga membolehkan anda mencari cara untuk meningkatkan interaksi antara komponen dan persekitarannya. Walau bagaimanapun, saya pasti bahawa saya tidak merangkumi semua aspek yang mungkin. Jika anda mempunyai sebarang idea, pemikiran atau contoh, saya berbesar hati untuk mempertimbangkannya dan memasukkannya ke dalam artikel.
Dalam artikel seterusnya, saya merancang untuk menyelami topik ini dengan lebih mendalam dan membincangkan pendekatan khusus untuk pemindahan data antara komponen. Kami akan menganalisisnya menggunakan kriteria kesederhanaan, kemudahan dan fleksibiliti yang digariskan di sini. Ini akan membantu kami memilih kaedah yang paling berkesan dan serba boleh yang sesuai untuk pelbagai tugas dan senario.
Berdasarkan amalan terbaik yang saya kenal pasti semasa bekerja, saya mencipta perpustakaan KoiCom.
Dokumentasi KoiCom
KoiCom github
Ia sudah pun menggabungkan cara paling berjaya untuk mengendalikan interaksi antara komponen dan persekitarannya. Saya amat berharap perpustakaan ini berguna kepada anda dan membantu memudahkan pembangunan komponen web. Jika anda mempunyai sebarang soalan atau maklum balas mengenai penggunaannya, saya berbesar hati untuk mendengar daripada anda.
Atas ialah kandungan terperinci Permulaan Komponen Web dengan Data Luaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!