Next.js vs Bereaksi? Ini adalah Kemitraan, Bukan Kompetisi
Diterbitkan: 2023-02-07Tidak ada kekurangan pustaka dan kerangka kerja JavaScript untuk pengembang web modern. Salah satu pustaka yang paling banyak digunakan adalah React, yang dibuat oleh Facebook (sekarang Meta) untuk membantu membangun aplikasi kaya fitur. Aplikasi React biasanya berjalan di browser web, tetapi framework Next.js memperluas fungsionalitas React ke sisi server melalui lingkungan runtime JavaScript Node.js.
Pada artikel ini, kita akan melihat Next.js dan React sehingga Anda dapat memutuskan apakah keduanya cocok untuk proyek Anda selanjutnya.
Next.js dan React: JavaScript di Tingkat Selanjutnya
Survei SlashData tahun 2022 menemukan bahwa ada lebih dari 17 juta pemrogram JavaScript di seluruh dunia, memimpin paket yang menyertakan bahasa populer seperti Python dan Java. JavaScript dapat digunakan pada sisi klien dan server, dan keserbagunaan ini berarti pengembang dapat membangun aplikasi lengkap menggunakan satu bahasa pemrograman.
Pengenalan pustaka JavaScript seperti React dan kerangka kerja seperti Next.js semakin meningkatkan pengembangan itu. Pustaka dan kerangka kerja ini menyediakan fitur yang menyederhanakan integrasi frontend dan backend. Selain itu, pengembang dapat memperluas kemampuan JavaScript menggunakan manajer paket seperti npm (manajer paket Node.js) untuk menginstal pustaka dan alat JavaScript. Sumber daya ini menyediakan fitur canggih yang mengurangi jumlah kode yang harus Anda tulis sendiri.
Ekstensibilitas JavaScript berarti bahwa pengetahuan komprehensif tentang alat yang paling umum adalah kunci kesuksesan Anda sebagai pengembang web.
Apa itu Next.js?
Awalnya dirilis pada tahun 2016 oleh Vercel, Next.js adalah framework React sumber terbuka yang menyediakan blok penyusun untuk membuat aplikasi web berkinerja tinggi. Perusahaan besar sejak itu mengadopsinya, termasuk Twitch, TikTok, dan Uber, untuk beberapa nama.
Next.js menawarkan salah satu pengalaman pengembang terbaik untuk membangun aplikasi yang cepat dan ramah SEO. Di bawah ini adalah beberapa fitur Next.js yang membuatnya menjadi kerangka kerja produksi yang luar biasa:
- Kemampuan rendering hybrid
- Pemecahan kode otomatis
- Pengoptimalan gambar
- Dukungan bawaan untuk praprosesor CSS dan pustaka CSS-in-JS
- Perutean bawaan
Fitur-fitur tersebut membantu pengembang Next.js menghemat banyak waktu untuk konfigurasi dan perkakas. Anda dapat langsung membangun aplikasi Anda, yang mungkin mendukung proyek seperti berikut:
- Toko e-niaga
- Blog
- Dasbor
- Aplikasi satu halaman
- Antarmuka pengguna yang berinteraksi
- Situs web statis
Apa itu Bereaksi?
React adalah pustaka JavaScript yang digunakan untuk membangun antarmuka pengguna yang dinamis. Selain membuat antarmuka web, Anda dapat membuat aplikasi seluler menggunakan React Native.
Beberapa manfaat menggunakan React antara lain:
- Performa yang ditingkatkan: Alih-alih memperbarui setiap komponen di DOM, React menggunakan DOM virtual untuk memperbarui hanya komponen yang diubah.
- Berbasis komponen berat: Setelah Anda membuat komponen, Anda dapat menggunakannya kembali berulang kali.
- Proses debug mudah: Aplikasi React menggunakan aliran data searah – hanya dari komponen induk ke komponen anak.
Next.js vs Bereaksi
Meskipun developer sering menggunakan Next.js dan React untuk tujuan yang sama, ada beberapa perbedaan mendasar di antara keduanya.
Kemudahan penggunaan
Sangat mudah untuk memulai dengan Next.js dan React. Masing-masing membutuhkan menjalankan satu perintah di terminal Anda menggunakan npx
, yang merupakan bagian dari npm untuk Node.js.
Untuk Next.js, perintah paling sederhana adalah:
npx create-next-app
Tanpa argumen tambahan untuk create-next-app
, instalasi akan dilanjutkan dalam mode interaktif. Anda akan dimintai nama proyek (yang akan digunakan untuk direktori proyek), dan apakah Anda ingin menyertakan dukungan untuk TypeScript dan kode linter ESLint.
Ini akan terlihat seperti ini:
Saat menginisialisasi instance React, perintah paling sederhana menyertakan nama untuk direktori proyek:
npx create-react-app new-app
Ini menghasilkan folder yang berisi semua konfigurasi dan dependensi awal yang diperlukan:
Meskipun keduanya memudahkan untuk memulai, ingatlah bahwa Next.js dibangun di atas React. Jadi, Anda tidak dapat mempelajari Next.js tanpa terlebih dahulu mempelajari React dan memahami cara kerjanya. Untungnya, React menawarkan kurva belajar yang lembut dan bagus untuk pemula.
Penting juga untuk dicatat bahwa React relatif tidak terstruktur. Anda harus menginstal dan menyiapkan perute React dan memutuskan cara menangani pengambilan data, pengoptimalan gambar, dan pemecahan kode. Pengaturan ini mengharuskan Anda menginstal dan mengonfigurasi pustaka dan alat tambahan.
Sebaliknya, Next.js hadir dengan alat-alat ini yang sudah diinstal dan dikonfigurasi sebelumnya. Dengan Next.js, file apa pun yang ditambahkan ke folder pages
secara otomatis berfungsi sebagai rute. Karena dukungan bawaan ini, Next.js lebih mudah digunakan setiap hari, memungkinkan Anda untuk segera memulai pengkodean logika aplikasi Anda.
Fitur Next.js dan React
Karena Next.js didasarkan pada React, keduanya berbagi beberapa fitur. Namun, Next.js melangkah lebih jauh dan menyertakan fitur tambahan seperti perutean, pemecahan kode, pra-rendering, dan dukungan API langsung dari kotaknya. Ini adalah fitur yang perlu Anda konfigurasikan sendiri saat menggunakan React.
Pengambilan Data
React merender data di sisi klien. Server mengirim file statis ke browser, lalu browser mengambil data dari API untuk mengisi aplikasi. Proses ini mengurangi kinerja aplikasi dan memberikan pengalaman pengguna yang buruk karena aplikasi dimuat dengan lambat. Next.js memecahkan masalah ini melalui pra-rendering.
Dengan pre-rendering, server melakukan panggilan API yang diperlukan dan mengambil data sebelum mengirim aplikasi ke browser. Dengan demikian, browser menerima halaman web yang siap dirender.
Pra-rendering dapat mengacu pada pembuatan situs statis (SSG) atau rendering sisi server (SSR). Di SSG, halaman HTML dihasilkan pada waktu pembuatan dan digunakan kembali untuk beberapa permintaan. Next.js dapat menghasilkan halaman HTML dengan atau tanpa data.
Di bawah ini adalah contoh bagaimana Next.js menghasilkan halaman tanpa data:
function App() { return <div>Welcome</div> } export default App
Untuk halaman statis yang menggunakan data eksternal, gunakan fungsi getStaticProps()
. Setelah Anda mengekspor getStaticProps()
dari halaman, Next.js akan melakukan pra-render halaman menggunakan properti yang dikembalikannya. Fungsi ini selalu berjalan di server, jadi gunakan getStaticProps()
saat data yang digunakan halaman tersedia pada waktu pembuatan. Misalnya, Anda dapat menggunakannya untuk mengambil entri blog dari CMS.
const Posts= ({ posts }) => { return ( <div className={styles.container}> {posts.map((post, index) => ( // render each post ))} </div> ); }; export const getStaticProps = async () => { const posts = getAllPosts(); return { props: { posts }, }; };
Dalam situasi di mana jalur halaman bergantung pada data eksternal, gunakan fungsi getStaticPaths()
. Jadi, untuk membuat jalur berdasarkan ID postingan, ekspor getStaticPaths()
dari halaman.
Misalnya, Anda dapat mengekspor getStaticPaths()
dari pages/posts/[id].js seperti yang ditunjukkan di bawah ini.
export getStaticPaths = async() => { // Get all the posts const posts = await getAllPosts() // Get the paths you want to pre-render based on posts const paths = posts.map((post) => ({ params: { id: post.id }, })) return { paths, fallback: false } }
getStaticPaths()
sering dipasangkan dengan getStaticProps()
. Dalam contoh ini, Anda akan menggunakan getStaticProps()
untuk mengambil detail ID di jalur.
export const getStaticProps = async ({ params }) => { const post = await getSinglePost(params.id); return { props: { post } }; };
Di SSR, data diambil pada waktu yang diminta dan dikirim ke browser. Untuk menggunakan SSR, ekspor fungsi props getServerSide()
dari halaman yang ingin Anda render. Server memanggil fungsi ini pada setiap permintaan, yang membuat SSR berguna untuk halaman yang menggunakan data dinamis.
Misalnya, Anda dapat menggunakannya untuk mengambil data dari API berita.
const News = ({ data }) => { return ( // render data ); }; export async function getServerSideProps() { const res = await fetch(`https://app-url/data`) const data = await res.json() return { props: { data } } }
Data diambil pada setiap permintaan dan diteruskan ke komponen Berita melalui alat peraga.
Pemisahan Kode
Pemecahan kode membagi kode menjadi potongan-potongan yang dapat dimuat browser sesuai permintaan. Ini mengurangi jumlah kode yang dikirim ke browser selama pemuatan awal, karena server hanya mengirimkan apa yang dibutuhkan pengguna. Bundel seperti Webpack, Rollup, dan Browserify mendukung pemecahan kode di React.
Next.js mendukung pemecahan kode di luar kotak.
Dengan Next.js, setiap halaman dipisahkan kodenya, dan menambahkan halaman ke aplikasi tidak akan menambah ukuran bundel. Next.js juga mendukung impor dinamis, yang memungkinkan Anda mengimpor modul JavaScript dan memuatnya secara dinamis selama runtime. Impor dinamis berkontribusi pada kecepatan halaman yang lebih cepat karena bundel dimuat dengan lambat.
Misalnya pada komponen Home di bawah ini, server tidak akan menyertakan komponen hero pada bundle awal.
const DynamicHero = dynamic(() => import('../components/Hero'), { suspense: true, }) export default function Home() { return ( <Suspense fallback={`Loading...`}> <DynamicHero /> </Suspense> ) }
Sebagai gantinya, elemen fallback suspense akan dirender sebelum komponen hero dimuat.
Dukungan API di Next.js vs React
Fitur perutean Next.js API memungkinkan Anda menulis kode backend dan frontend dalam basis kode yang sama. Setiap halaman yang disimpan di folder /pages/api/ dipetakan ke rute /api/* , dan Next.js memperlakukannya seperti titik akhir API.
Misalnya, Anda dapat membuat rute API pages/api/user.js yang mengembalikan nama pengguna saat ini seperti ini:
export default function user(req, res) { res.status(200).json({ username: 'Jane' }); }
Jika Anda mengunjungi URL https://app-url/api/user , Anda akan melihat objek nama pengguna.
{ username: 'Jane' }
Rute API berguna saat Anda ingin menutupi URL layanan yang Anda akses atau ingin merahasiakan variabel lingkungan tanpa mengkode seluruh aplikasi backend.
Pertunjukan
Next.js tidak diragukan lagi unggul dalam kemampuannya untuk membuat aplikasi berperforma lebih baik dengan proses yang disederhanakan. Aplikasi SSR dan SSG Next.js bekerja lebih baik daripada aplikasi React rendering sisi klien (CSR). Dengan mengambil data di server dan mengirimkan semua yang dibutuhkan browser untuk dirender, Next.js menghilangkan kebutuhan akan permintaan pengambilan data ke API. Ini berarti waktu muat lebih cepat.
Lebih jauh lagi, karena Next.js mendukung perutean sisi klien. Browser tidak harus mengambil data dari server setiap kali pengguna menavigasi ke rute lain. Selain itu, komponen gambar Next.js memungkinkan pengoptimalan gambar otomatis. Gambar hanya dimuat saat memasuki viewport. Jika memungkinkan, Next.js juga menyajikan gambar dalam format modern seperti WebP.
Next.js juga menyediakan pengoptimalan font, prefetching rute pintar, dan pengoptimalan bundling. Pengoptimalan ini tidak tersedia secara otomatis di React.
Mendukung
Karena React telah ada lebih lama dari Next.js, ia memiliki komunitas yang lebih luas. Namun, banyak pengembang React yang mengadopsi Next.js, sehingga komunitas terus berkembang. Pengembang lebih mudah menemukan solusi yang ada untuk masalah yang mereka hadapi daripada harus membangun solusi dari awal.
Next.js juga menampilkan dokumentasi yang sangat baik dengan contoh lengkap yang mudah dipahami. Terlepas dari popularitasnya, dokumentasi React tidak dapat dinavigasi.
Ringkasan
Memilih Next.js atau React bermuara pada persyaratan aplikasi.
Next.js meningkatkan kemampuan React dengan menyediakan struktur dan alat yang meningkatkan kinerja. Alat-alat ini, seperti perutean, pemecahan kode, dan pengoptimalan gambar, disertakan dalam Next.js, artinya pengembang tidak perlu mengonfigurasi apa pun secara manual. Berkat fitur-fitur ini, Next.js mudah digunakan, dan pengembang dapat segera memulai pengkodean logika bisnis.
Karena opsi rendering yang berbeda, Next.js cocok untuk aplikasi yang dirender sisi server atau aplikasi yang menggabungkan pembuatan statis dan rendering sisi server Node.js. Selain itu, berkat fitur pengoptimalan yang disediakan oleh Next.js, sangat cocok untuk situs yang membutuhkan kecepatan, seperti toko ecommerce.
React adalah library JavaScript yang dapat membantu Anda membuat dan menskalakan aplikasi front-end yang kuat. Sintaksnya juga mudah, terutama untuk pengembang dengan latar belakang JavaScript. Selain itu, Anda memiliki kendali atas alat yang Anda gunakan dalam aplikasi Anda dan cara Anda mengonfigurasinya.
Merencanakan aplikasi Anda sendiri yang mendominasi dunia? Pelajari pendekatan Kinsta terhadap hosting aplikasi Node.js untuk layanan yang mendukung React dan Next.js.