React Core Team, yakın zamanda React18'in alfa sürümünü yayınladı. Bu sürüm, daha çok Kullanıcı Deneyimi ve eşzamanlı özelliklere uyarlama dahil olmak üzere iç mimari değişikliklerine odaklanmıştır.
Reactjs 18 Alfa versiyonunu aşağıdakini kullanarak hemen kurabiliriz:
npm install react@alpha react-dom@alpha
Genellikle onunki gibi bir Kök seviyesi DOM seviyesi oluşturur ve React Uygulamasını ekleriz. Bu artık kullanımdan kaldırıldı ve artık "Eski Kök API" olarak adlandırılıyor
import React from 'react';
import ReactDOM from 'react-dom';
const container = document.getElementById('root')
ReactDOM.render(<App />, container);
Bunun yerine, Root API, React18'de şuna benzeyen yeni bir şey tanıtıldı:
import React from 'react';
import ReactDOM from 'react-dom';
import App from 'App'
const container = document.getEleementById('root')
const root = ReactDOM.createRoot(container)
root.render(<App />)
React18 , React 17 (veya daha eski) uygulamalarının React 18'e sorunsuz geçişini sağlamak için hem Legacy Root APIve hem de ile birlikte New Root API gönderilir.
Eski Kök API Üzerinden Yeni Kök API Kullanma
a.) İsteğe bağlı bir boole değerini doğrudan köke aktarabildiğimiz için hidrat işlevini kullanmak kolaydır.
Eski Kök API :
import ReactDOM from 'react-dom'
import App from 'App'
const container = document.getElementById('app');
ReactDOM.hydrate(<App />, container)
Yeni Kök API'si:
import ReactDOM from ‘react-dom’;
import App from 'App';
const container = document.getElementById('root');
const root = ReactDOM.createRoot(container, { hydrate: true });
root.render(<App />);
Hidrasyon hakkında daha fazla bilgiyi (https://stackoverflow.com/questions/46516395/whats-the-difference-between-hydrate-and-render-in-react-16) okuyun
b.) Render callback'teki iyileştirmeler
Legacy Root API'de bir render geri çağırma işlevi iletebiliriz. Bu, kök bileşen takıldıktan sonra işleyen/çalışan anonim bir işlevdir.
import React from 'react';
import ReactDOM from 'react-dom';
import App from 'App'
const container = document.getElementById('root')
ReactDOM.render(<App />, container, function(){
console.log('render only after initial component rendering')
})
console.log('render at very last')
Bu yaklaşım Yeni Kök API'de değiştirildi, geri aramalar kullanmak yerine React Team, requestIdleCallback hatta yerel kullanmayı önerir.
Bu, bu sürümle birlikte sunulan yeni bir API'dir ve mevcut web sayfasının yanıt vermeye devam etmesine ve aynı anda ağır, engelleyici olmayan UI güncellemeleri yapabilmesine yardımcı olur.
Bunun için önemli bir kullanım durumu startTransition, bir kullanıcının bir arama kutusuna yazmaya başlaması olabilir. Arama sonuçları birkaç milisaniye bekleyebilirken (kullanıcı tarafından beklendiği gibi) giriş değeri hemen güncellenmelidir.
Bu API, hızlı güncellemeler ile gecikmeli güncellemeler arasında ayrım yapmanın bir yolunu sağlar.
Gecikmeli güncelleme (yani bir UI görünümünün diğerine geçişi), Geçiş Güncellemeleri olarak adlandırılır.
Yazma, fareyle üzerine gelme, tıklama gibi acil güncellemeler için sahne/işlevleri genellikle şöyle çağırırız:
setText(input)
Acil olmayan veya yoğun kullanıcı arayüzü güncellemeleri için bunu bir startTransitionAPI'ye şu şekilde sarabiliriz :
startTransition(() => {
setText(input);
});
React18, şimdi <StrictMode />ile birlikte gönderilecek Strict Effects. Tıpkı Strict Mode, bu geliştirme yapıları ve geliştirilmiş DX için olacaktır.
Bir bileşen Strict Effects'e sarıldığında, React, genellikle useEffectmontaj ve temizleme işlevleriyle çalışırken sorun yaratan olağandışı davranış/kalıpları tespit etmek için yan etkileri "kasıtlı olarak" iki kez çalıştırdığınızdan emin olur .
Etkileri iki kez çalıştırma,
mount -> unmount -> mount gibi birşey.
Sunucu tarafı oluşturma, ilk yükleme ekranı süresinde iyileştirmeler de dahil olmak üzere bu sürümde mimari bir revizyon alıyor.
Eski versiyonda (17 tepki verecek), SSR sayfayı oluşturmaya başlamadan önce tüm sayfayı yüklemek zorunda kalıyordu.
Bu olay React 18'de değişti, şimdi React bileşenlerini <Suspense />kullanarak daha küçük parçalara ayırabiliriz.
Buna seçici hidrasyon denir. ekranda 4 - 5 farklı bileşenimiz olduğunu varsayalım, bir bileşeni şimdi sarmak, kod yüklendikten sonra çok özel bileşeni nemlendirmeye başlayacak ve sayfanın geri kalanını engellemeyecektir. Bu stratejiye sahip olarak, sayfanın daha önemli parçaları/bileşenleri ilk önce etkileşimli hale gelebilirken (aşırı yavaş bağlantı altında), diğer bileşenler iyi bir kullanıcı deneyimi sağlayarak nemlendirmeye devam edecektir.
<Layout>
<Suspense fallback={<LoadingSpinner />}>
<DelayedComponent />
<Suspense />
<Layout />
Burada, <Delayed /> veriler getirilinceye kadar bileşen çözülmeyecek, o zamana kadar bileşen <LoadingSpinner />.
<Suspense /> Önemli bileşenleri etkileşimli tutarak farklı zamanlarda veri getiren birkaç bileşen için kullanabiliriz .
Ağır verilerin getirildiği bileşenlerin ekranda göründüğü sırayı "düzenleyen" başka bir React 18 eşzamanlı özelliği.
<SuspenseList />, revealOrder ileriye, geriye veya birlikte değerlere sahip pervaneyi alır
<SuspenseList revealOrder="forwards">
<Suspense fallback={<LoadingSpinner />}>
<CardComponent id={1} />
</Suspense>
<Suspense fallback={<LoadingSpinner />}>
<CardComponent id={2} />
</Suspense>
</SuspenseList>
Burada kart bileşeni ileri yönde gösterilecektir (veriler alınana kadar LoadingSpinner Bileşenine geri dönecektir). Benzer şekilde, backwards Kartları ters sırada gösterecek ve birlikte pervane her şeyi "birlikte" yapacak.
useDeferredValuebir durum değeri alır, milisaniye cinsinden bir zaman aşımı süresi alır ve bu değerin "ertelenmiş sürümünü" döndürür. Bu değer, sağlanan zaman aşımı saniyeleri kadar geride kalır.
const deferredValue = useDeferredValue(value, { timeoutMs: 3000 });
Bu, bir metin giriş alanı için bir kullanım durumu olabilir. Metin girişi hemen ekrana işlenir, ancak <CardLists /> metin destekleri a alır useDeferredValue ve defferedText3 saniye gecikmeli bir a döndürür . Bu, Kart Listeleri bileşeninin gecikmesine neden olurken, kullanıcıların metin alanını hızlı hissetmesine izin vermeye devam eder.
function App() {
const [text, setText] = useState("");
const deferredText = useDeferredValue(text, { timeoutMs: 2000 });
return (
<div className="App">
<input value={text} onChange={handleChange} />
<CardLists text={deferredText} />
</div>
);
}
React18, uygulama ve kütüphanelerin yazarının herhangi bir kırılma değişikliğine değil, yumuşak bir geçişe sahip olabilmesinin nedeni, tam gelişmiş bir eşzamanlı moddan (React16'dan çok fazla uyarılmış olan) ziyade eşzamanlı özelliklerle ilgilidir.
Reaktör 18 şu anda bir alfa sürümüdür ve bu yılın sonuna kadar istikrarlı bir sürüme ulaşana kadar üretim için uygun değildir. Bu, React 18 ile ilgili yazımızı sonlandırıyoruz.
As a JavaScript developer, it's essential to have a solid understanding of the language and its various concepts. In this article, we will provide some common interview questions and their answers to
Frontend development is an essential part of web development that focuses on building the user interface of a website or application. Frontend developers are responsible for creating visually appealin
React is a popular JavaScript library used for building user interfaces. It has become increasingly popular over the years and is now widely used in web development. If you're preparing for a React in
As web applications become more complex, the size of the JavaScript bundles that are required to run them can become unwieldy. This can lead to slow load times and poor user experiences, particularly
Managing state in a complex application can be a daunting task, but Redux can help simplify the process. Redux is a popular library for managing state in JavaScript applications, and it can be used wi
React is a popular JavaScript library for building user interfaces. One of the key features that sets React apart from other libraries is its use of a virtual DOM. In this article, we will explore wha
Forms are an essential element of web development. They allow users to submit information and interact with web applications. However, users can sometimes make mistakes or input incorrect data, which
As more and more websites become image-heavy, web developers are constantly looking for ways to optimize page load times without compromising the user experience. One of the most effective methods of
Asynchronous JavaScript code is becoming more and more prevalent in modern web applications. However, asynchronous code can be tricky to debug and maintain, especially when it comes to handling errors