Next.js ve React? Bu bir Ortaklık, Rekabet Değil

Yayınlanan: 2023-02-07

Modern web geliştiricileri için JavaScript kitaplıkları ve çerçeveleri sıkıntısı yoktur. En yaygın kitaplıklardan biri, Facebook'un (şimdi Meta) zengin özelliklere sahip uygulamalar oluşturmaya yardımcı olmak için oluşturduğu React'tir. React uygulamaları geleneksel olarak web tarayıcılarında çalışır, ancak Next.js çerçevesi, React işlevselliğini JavaScript çalıştırma ortamı Node.js aracılığıyla sunucu tarafına genişletir.

Bu makalede, bir sonraki projeniz için doğru olup olmadığına karar verebilmeniz için Next.js ve React'e bakacağız.

Next.js ve React: Sonraki Düzeyde JavaScript

2022 SlashData anketi, dünya çapında 17 milyondan fazla JavaScript programcısı olduğunu ve Python ve Java gibi popüler dilleri içeren bir pakete liderlik ettiğini ortaya çıkardı. JavaScript hem istemci hem de sunucu tarafında kullanılabilir ve bu çok yönlülük, geliştiricilerin tek bir programlama dili kullanarak eksiksiz uygulamalar oluşturabileceği anlamına gelir.

Çeşitli dilleri kullanan programcıların sayısını gösteren grafik, birçok kişinin Next.js ve React'i merak ettiğini gösteriyor.
2022'de programcılar tarafından kullanılan dillerin Slash/Data anketi. (Kaynak: Statista)

React gibi JavaScript kitaplıklarının ve Next.js gibi çerçevelerin kullanıma sunulması bu gelişimi daha da geliştirdi. Bu kitaplıklar ve çerçeveler, ön uç ve arka uç entegrasyonunu basitleştiren özellikler sağlar. Ayrıca geliştiriciler, JavaScript kitaplıklarını ve araçlarını yüklemek için npm (Node.js paket yöneticisi) gibi paket yöneticilerini kullanarak JavaScript yeteneklerini genişletebilir. Bu kaynaklar, kendi başınıza yazmanız gereken kod miktarını azaltan gelişmiş özellikler sağlar.

JavaScript'in genişletilebilirliği, en yaygın araçları hakkında kapsamlı bilgi sahibi olmanın bir web geliştiricisi olarak başarınızın anahtarı olduğu anlamına gelir.

Next.js Nedir?

İlk olarak 2016 yılında Vercel tarafından piyasaya sürülen Next.js, yüksek performanslı web uygulamaları oluşturmak için yapı taşları sağlayan açık kaynaklı bir React çerçevesidir. Twitch, TikTok ve Uber de dahil olmak üzere büyük şirketler o zamandan beri bunu benimsedi.

Next.js, hızlı, SEO dostu uygulamalar oluşturmak için en iyi geliştirici deneyimlerinden birini sunar. Aşağıda, Next.js'yi olağanüstü bir üretim çerçevesi yapan bazı özellikler verilmiştir:

  • Hibrit oluşturma yetenekleri
  • Otomatik kod bölme
  • Görüntü optimizasyonu
  • CSS ön işlemcileri ve CSS-in-JS kitaplıkları için yerleşik destek
  • Yerleşik yönlendirme

Bu özellikler, Next.js geliştiricilerinin yapılandırma ve araçlar üzerinde önemli ölçüde zaman kazanmasına yardımcı olur. Aşağıdaki gibi projeleri destekleyebilecek uygulamanızı oluşturmaya doğrudan geçebilirsiniz:

  • E-ticaret mağazaları
  • Bloglar
  • Panolar
  • Tek sayfa uygulamaları
  • Etkileşimli kullanıcı arayüzleri
  • Statik web siteleri

Tepki Nedir?

React, dinamik kullanıcı arayüzleri oluşturmak için kullanılan bir JavaScript kitaplığıdır. Web arayüzleri oluşturmaya ek olarak, React Native kullanarak mobil uygulamalar da oluşturabilirsiniz.

React kullanmanın bazı faydaları şunlardır:

  • Geliştirilmiş performans: React, DOM'daki her bir bileşeni güncellemek yerine, yalnızca değişen bileşenleri güncellemek için sanal bir DOM kullanır.
  • Ağırlıklı olarak bileşen tabanlı: Bir bileşen oluşturduğunuzda, onu tekrar tekrar kullanabilirsiniz.
  • Kolay hata ayıklama: React uygulamaları, yalnızca ebeveynden alt bileşenlere tek yönlü bir veri akışı kullanır.

Next.js ve React

Geliştiriciler genellikle Next.js ve React'i aynı amaç için kullansalar da, ikisi arasında bazı temel farklılıklar vardır.

Kullanım kolaylığı

Next.js ve React ile başlamak kolaydır. Her biri, terminalinizde Node.js için npm'nin bir parçası olan npx kullanılarak tekli komutların çalıştırılmasını gerektirir.

Next.js için en basit komut şudur:

 npx create-next-app

create-next-app için ek bağımsız değişken olmadan, yükleme etkileşimli modda devam edecektir. Sizden bir proje adı (proje dizini için kullanılacak) ve TypeScript ve linter ESLint kodunu dahil etmek isteyip istemediğiniz sorulacaktır.

Bunun gibi bir şey görünecek:

Npx ile oluşturulan bir Next.js uygulamasının ekran görüntüsü.
Etkileşimli modda bir Next.js uygulaması oluşturma.

Bir React örneğini başlatırken, en basit komut, projenin dizini için bir ad içerir:

 npx create-react-app new-app

Bu, gerekli tüm ilk yapılandırmaları ve bağımlılıkları içeren bir klasör oluşturur:

Npx ile oluşturulan bir React projesinin ekran görüntüsü.
Terminal komut satırında bir React projesi oluşturma.

Her ikisi de başlamayı kolaylaştırsa da, Next.js'nin React üzerine inşa edildiğini unutmayın. Bu nedenle, önce React'i öğrenmeden ve nasıl çalıştığını anlamadan Next.js'yi öğrenemezsiniz. Neyse ki React, yumuşak bir öğrenme eğrisine sahiptir ve yeni başlayanlar için harikadır.

React'in nispeten yapılandırılmamış olduğunu not etmek de önemlidir. Bir React yönlendirici kurmalı ve kurmalı ve veri alma, görüntü optimizasyonu ve kod bölme işlemlerini nasıl yapacağınıza karar vermelisiniz. Bu kurulum, ek kitaplıklar ve araçlar yüklemenizi ve yapılandırmanızı gerektirir.

Buna karşılık, Next.js bu araçlar önceden yüklenmiş ve önceden yapılandırılmış olarak gelir. Next.js ile, pages klasörüne eklenen herhangi bir dosya otomatik olarak rota görevi görür. Bu yerleşik destek sayesinde Next.js ile günlük olarak çalışmak daha kolaydır ve uygulamanızın mantığını hemen kodlamaya başlamanızı sağlar.

Kendi dünyaya hakim uygulamanızı mı planlıyorsunuz? Bu kılavuz, projeniz için doğru seçeneği belirlemenize yardımcı olacaktır ️ Tweet için Tıklayın

Next.js ve React Özellikleri

Next.js, React'i temel aldığından, ikisi bazı özellikleri paylaşır. Ancak Next.js bir adım daha ileri gider ve kutudan çıkar çıkmaz yönlendirme, kod bölme, ön işleme ve API desteği gibi ek özellikler içerir. Bunlar, React'i kullanırken kendiniz yapılandırmanız gereken özelliklerdir.

Veri Alma

React, verileri istemci tarafında işler. Sunucu, statik dosyaları tarayıcıya gönderir ve ardından tarayıcı, uygulamayı doldurmak için API'lerden verileri getirir. Bu işlem, uygulama performansını düşürür ve uygulama yavaş yüklendiği için kötü bir kullanıcı deneyimi sağlar. Next.js bu sorunu ön işleme yoluyla çözer.

Ön işleme ile sunucu, uygulamayı tarayıcıya göndermeden önce gerekli API çağrılarını yapar ve verileri getirir. Bu nedenle tarayıcı, oluşturulmaya hazır web sayfalarını alır.

Ön işleme, statik site oluşturma (SSG) veya sunucu tarafı işleme (SSR) anlamına gelebilir. SSG'de, HTML sayfaları oluşturma zamanında oluşturulur ve birden çok istek için yeniden kullanılır. Next.js, veri içeren veya içermeyen HTML sayfaları oluşturabilir.

Aşağıda, Next.js'nin veri içermeyen sayfaları nasıl oluşturduğuna dair bir örnek verilmiştir:

 function App() { return <div>Welcome</div> } export default App

Dış verileri tüketen statik sayfalar için getStaticProps() işlevini kullanın. Bir getStaticProps() dışa aktardığınızda, Next.js, döndürdüğü donanımları kullanarak sayfayı önceden oluşturur. Bu işlev her zaman sunucuda çalışır, bu nedenle sayfanın kullandığı veriler oluşturma sırasında mevcut olduğunda getStaticProps() kullanın. Örneğin, bir CMS'den blog gönderilerini almak için kullanabilirsiniz.

 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 }, }; };

Sayfa yollarının harici verilere bağlı olduğu durumlarda getStaticPaths() işlevini kullanın. Bu nedenle, gönderi kimliğine dayalı bir yol oluşturmak için getStaticPaths() dışa aktarın.

Örneğin, aşağıda gösterildiği gibi sayfalardan/yazılardan/[id] getStaticPaths() dosyasını dışa aktarabilirsiniz.

 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() genellikle getStaticProps() () ile eşleştirilir. Bu örnekte, yoldaki kimliğin ayrıntılarını getirmek için getStaticProps() işlevini kullanırsınız.

 export const getStaticProps = async ({ params }) => { const post = await getSinglePost(params.id); return { props: { post } }; };

SSR'de, veriler istenen zamanda alınır ve tarayıcıya gönderilir. SSR'yi kullanmak için, oluşturmak istediğiniz sayfadan getServerSide() props işlevini dışa aktarın. Sunucu bu işlevi her istekte çağırır, bu da SSR'yi dinamik veri tüketen sayfalar için kullanışlı kılar.

Örneğin, bir haber API'sinden veri almak için kullanabilirsiniz.

 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 } } }

Veriler her istekte alınır ve aksesuarlar aracılığıyla Haberler bileşenine iletilir.

Kod Bölme

Kod bölme, kodu tarayıcının talep üzerine yükleyebileceği parçalara bölmektedir. Sunucu yalnızca kullanıcının ihtiyaç duyduğu kadarını gönderdiğinden, ilk yükleme sırasında tarayıcıya gönderilen kod miktarını azaltır. Webpack, Rollup ve Browserify gibi paketleyiciler, React'te kod bölmeyi destekler.

Next.js, kutudan çıkar çıkmaz kod bölmeyi destekler.

Next.js ile her sayfa koda bölünmüştür ve uygulamaya sayfa eklemek paket boyutunu artırmaz. Next.js, JavaScript modüllerini içe aktarmanıza ve bunları çalışma zamanı sırasında dinamik olarak yüklemenize olanak tanıyan dinamik içe aktarmayı da destekler. Paketler geç yüklendiğinden, dinamik içe aktarmalar daha yüksek sayfa hızlarına katkıda bulunur.

Örneğin, aşağıdaki Ana Sayfa bileşeninde, sunucu kahraman bileşenini ilk pakete dahil etmeyecektir.

 const DynamicHero = dynamic(() => import('../components/Hero'), { suspense: true, }) export default function Home() { return ( <Suspense fallback={`Loading...`}> <DynamicHero /> </Suspense> ) }

Bunun yerine, gerilimin geri dönüş öğesi, kahraman bileşeni yüklenmeden önce işlenecektir.

Next.js ve React'te API Desteği

Next.js API yönlendirme özelliği, aynı kod tabanında arka uç ve ön uç kodu yazmanıza olanak tanır. /pages/api/ klasörüne kaydedilen tüm sayfalar / api/* rotasıyla eşlenir ve Next.js bunu bir API uç noktası gibi ele alır.

Örneğin, geçerli kullanıcının adını şu şekilde döndüren bir page/api/user.js API yolu oluşturabilirsiniz:

 export default function user(req, res) { res.status(200).json({ username: 'Jane' }); }

https://app-url/api/user URL'sini ziyaret ederseniz, username nesnesini göreceksiniz.

 { username: 'Jane' }

Erişmekte olduğunuz bir hizmetin URL'sini maskelemek istediğinizde veya tüm arka uç uygulamasını kodlamadan ortam değişkenlerini gizli tutmak istediğinizde API yolları yardımcı olur.

Verim

Next.js, basitleştirilmiş bir süreçle daha iyi performans gösteren uygulamalar oluşturma becerisinde şüphesiz üstündür. SSR ve SSG Next.js uygulamaları, istemci tarafı işleme (CSR) React uygulamalarından daha iyi performans gösterir. Next.js, sunucudaki verileri alarak ve tarayıcının oluşturması gereken her şeyi göndererek API'lere veri getirme isteği ihtiyacını ortadan kaldırır. Bu, daha hızlı yükleme süreleri anlamına gelir.

Ayrıca, Next.js istemci tarafı yönlendirmeyi desteklediği için. Bir kullanıcı başka bir rotaya her gittiğinde tarayıcının sunucudan veri alması gerekmez. Ek olarak, Next.js görüntü bileşeni, otomatik görüntü optimizasyonu sağlar. Görüntüler yalnızca görüntü alanına girdiklerinde yüklenir. Next.js, mümkün olduğunda WebP gibi modern biçimlerde görüntüler de sunar.

Next.js ayrıca yazı tipi optimizasyonları, akıllı rota ön getirme ve paketleme optimizasyonları sağlar. Bu optimizasyonlar React'te otomatik olarak mevcut değildir.

Destek

React, Next.js'den daha uzun süredir piyasada olduğundan, daha kapsamlı bir topluluğa sahiptir. Ancak, birçok React geliştiricisi Next.js'yi benimsiyor, bu nedenle topluluk istikrarlı bir şekilde büyüyor. Geliştiriciler, sıfırdan çözümler oluşturmak yerine karşılaştıkları sorunlara mevcut çözümleri daha kolay buluyorlar.

Next.js ayrıca anlaşılması kolay kapsamlı örnekler içeren mükemmel belgelere sahiptir. Popülerliğine rağmen, React dokümantasyonu o kadar gezilebilir değildir.

Team Next.js misiniz yoksa Team React misiniz? Bu gönderideki her iki popüler seçeneği de keşfedin Tweet için Tıklayın

Özet

Next.js veya React'i seçmek, bir uygulamanın gereksinimlerine bağlıdır.

Next.js, performansı artıran yapı ve araçlar sağlayarak React'in yeteneklerini geliştirir. Yönlendirme, kod bölme ve görüntü optimizasyonu gibi bu araçlar Next.js'de yerleşiktir, yani geliştiricilerin hiçbir şeyi manuel olarak yapılandırması gerekmez. Bu özellikler sayesinde Next.js'nin kullanımı kolaydır ve geliştiriciler iş mantığını hemen kodlamaya başlayabilir.

Farklı işleme seçenekleri nedeniyle Next.js, sunucu tarafında oluşturulmuş uygulamalar veya statik oluşturma ile Node.js sunucu tarafında işlemeyi birleştiren uygulamalar için uygundur. Ayrıca Next.js'nin sağladığı optimizasyon özelliği sayesinde, e-ticaret mağazaları gibi hızlı olması gereken siteler için mükemmeldir.

React, güçlü ön uç uygulamaları oluşturmanıza ve ölçeklendirmenize yardımcı olabilecek bir JavaScript kitaplığıdır. Sözdizimi de, özellikle JavaScript geçmişi olan geliştiriciler için basittir. Ayrıca, uygulamanızda kullandığınız araçlar ve bunları nasıl yapılandırdığınız üzerinde kontrol sahibi olursunuz.

Kendi dünyaya hakim uygulamanızı mı planlıyorsunuz? React ve Next.js'yi destekleyen hizmetler için Kinsta'nın Node.js uygulama barındırma yaklaşımını inceleyin.