Saya telah bermain-main dengan React dan sejauh ini saya sangat menyukainya. Saya sedang membangun aplikasi dengan NodeJS dan ingin menggunakan React untuk beberapa komponen interaktif di seluruh aplikasi. Saya tidak ingin menjadikannya aplikasi satu halaman.
Saya belum menemukan apa pun di web yang menjawab pertanyaan-pertanyaan berikut:
Bagaimana cara memecah atau menggabungkan komponen React saya di aplikasi multi-halaman?
Saat ini semua komponen saya ada dalam satu file meskipun saya mungkin tidak pernah memuatnya di beberapa bagian aplikasi.
Sejauh ini saya mencoba menggunakan pernyataan bersyarat untuk membuat komponen dengan mencari ID wadah tempat React akan merender. Saya tidak 100% yakin tentang praktik terbaik dengan React. Ini terlihat seperti ini.
if(document.getElementById('a-compenent-in-page-1')) {
React.render(
<AnimalBox url="/api/birds" />,
document.getElementById('a-compenent-in-page-1')
);
}
if(document.getElementById('a-compenent-in-page-2')) {
React.render(
<AnimalBox url="/api/cats" />,
document.getElementById('a-compenent-in-page-2')
);
}
if(document.getElementById('a-compenent-in-page-3')) {
React.render(
<AnimalSearchBox url="/api/search/:term" />,
document.getElementById('a-compenent-in-page-3')
);
}
Saya masih membaca dokumentasi dan belum menemukan apa yang saya butuhkan untuk aplikasi multi halaman.
Terima kasih sebelumnya.
sumber
render
buatlah komponen yang benar dalam satuscript
blok.Jawaban:
Saat ini, saya sedang melakukan hal serupa.
Aplikasi ini bukan Aplikasi React lengkap, saya menggunakan React untuk Stuff dinamis, seperti CommentBox, yang autark. Dan dapat dimasukkan di mana saja dengan parameter khusus ..
Namun, semua sub Aplikasi saya dimuat dan dimasukkan ke dalam satu file
all.js
, sehingga dapat di-cache oleh browser di seluruh halaman.Saat saya perlu memasukkan Aplikasi ke dalam Template SSR, saya hanya perlu menyertakan DIV dengan kelas "__react-root" dan ID khusus, (nama Aplikasi React yang akan dirender)
Logikanya sangat sederhana:
Sunting
Karena webpack sangat mendukung pemisahan kode & LazyLoading, saya pikir masuk akal untuk menyertakan contoh di mana Anda tidak perlu memuat semua aplikasi Anda dalam satu bundel, tetapi membaginya dan memuat sesuai permintaan.
sumber
create react app
memberi Anda beberapa perkakas mudah untuk dibuatbundle.js
. Jadi, tujuan dari jawaban saya adalah untuk menggunakan yang samabundle.js
dan menggunakannya di berbagai situs SSR mutliple, dan memuat banyak aplikasi React yang berbeda ke dalam satu halaman. Maaf, jika jawaban saya tidak sesuai dengan kebutuhan Anda, silakan buat Posting baru dan jelaskan apa yang Anda coba lakukan, saya akan mencoba membantu Anda.Anda dapat memberikan beberapa titik masuk untuk aplikasi di file webpack.config.js:
maka Anda dapat memiliki di folder src Anda tiga file html berbeda dengan file js masing-masing (contoh untuk halaman1):
File JavaScript:
Komponen React yang berbeda kemudian dapat dimuat untuk setiap halaman.
sumber
webpack version < 4 it was common to add vendors as separate entrypoint to compile it as separate file (in combination with the CommonsChunkPlugin). This is discouraged in webpack 4. Instead the optimization.splitChunks option takes care of separating vendors and app modules and creating a separate file. Do not create a entry for vendors or other stuff which is not the starting point of execution.
Jadi, apakah sampel ini harus diperbarui untuk webpack 4+?Saya membangun aplikasi dari nol dan belajar sambil jalan, tapi saya rasa yang Anda cari adalah React-Router . React-Router memetakan komponen Anda ke URL tertentu. Sebagai contoh:
Dalam kasus pencarian, 'term' dapat diakses sebagai properti di AnimalSearchBox:
Cobalah. Tutorial ini adalah salah satu yang menempatkan saya di atas dalam hal pemahaman saya tentang ini dan topik terkait lainnya.
Berikut jawaban asli:
Saya menemukan jalan saya di sini mencari jawaban yang sama. Lihat apakah posting ini menginspirasi Anda. Jika aplikasi Anda seperti milik saya, itu akan memiliki area yang sangat sedikit berubah dan hanya bervariasi di bagian utama. Anda dapat membuat widget yang tanggung jawabnya untuk membuat widget berbeda berdasarkan status aplikasi. Dengan menggunakan arsitektur flux, Anda dapat mengirimkan tindakan navigasi yang mengubah status widget body Anda, yang secara efektif memperbarui body halaman saja.
Itulah pendekatan yang saya coba sekarang.
sumber
Router
bekerja dengan cara yang sama dalam satu aplikasi halaman?Apakah Anda menggunakan CMS? Mereka cenderung suka mengubah url yang dapat merusak aplikasi Anda.
Cara lain adalah menggunakan sesuatu seperti React Habitat .
Dengan itu, Anda dapat mendaftarkan komponen dan mereka secara otomatis terekspos ke dom.
Contoh
Daftarkan komponen:
Kemudian mereka tersedia di dom Anda seperti ini:
Di atas akan otomatis diganti dengan komponen react Anda.
Anda kemudian dapat secara otomatis meneruskan properti (atau props) ke komponen Anda juga:
Ini akan terlihat
size
sebagai penyangga komponen Anda. Ada opsi tambahan untuk meneruskan tipe lain seperti json, array's, ints, floats dll.sumber
Saya tahu sudah lama sejak pertanyaan ini diajukan, tetapi semoga ini membantu seseorang.
Seperti yang disebutkan @Cocomico, Anda dapat memberikan beberapa titik masuk untuk aplikasi di file webpack.config.js. Jika Anda mencari pengaturan Webpack sederhana (berdasarkan gagasan beberapa titik masuk) yang memungkinkan Anda menambahkan komponen React ke halaman statis, Anda dapat mempertimbangkan untuk menggunakan ini: https://github.com/przemek-nowicki/multi-page -app-dengan-bereaksi
sumber
Saya sarankan Anda melihat InertiaJS: https://inertiajs.com/
sumber