React, kullanıcı arayüzü oluşturmak için kullanabileceğiniz çok güçlü bir araçtır. Ancak, React'i kullanmadan önce JavaScript'in temel konularını iyi bilmeniz önemlidir. Özellikle, ES6+ özellikleri, asenkron JavaScript, JavaScript modülleri, dizi yöntemleri ve event loop ve concurrency model gibi konular React uygulamalarınızda kullanmanız için gereklidir. Ayrıca, bu konuların her biri için kod örnekleriyle açıklamalar yapmak, React uygulamalarınızı yazarken daha rahat olmanızı sağlar. Bu konu başlıklarını aşağıdan inceleyebilirsiniz.
Arrow Functions: ES6'da eklenen arrow function syntax'ı, daha kısa ve okunaklı kod yazmamızı sağlar. Örneğin,
const add = (a, b) => {
return a + b;
}
Template Literals: ES6 ile birlikte gelen template literals, stringlerde değişkenleri ve fonksiyonları kolayca kullanmamıza olanak tanır. Örneğin,
const name = "John";
console.log(`Hello, ${name}`); // "Hello, John"
Destructuring: ES6 ile birlikte gelen destructuring, nesneler ve dizilerdeki değerleri kolayca çekmemizi sağlar. Örneğin,
const person = { name: "John", age: 30 };
const { name } = person;
console.log(name); // "John"
Spread Operator: ES6 ile birlikte gelen spread operator, diziler ve nesneler arasında kolayca kopyalama ve birleştirme yapmamıza olanak tanır. Örneğin,
const fruits = ["apple", "banana"];
const moreFruits = ["orange", "mango", ...fruits];
console.log(moreFruits); // ["orange", "mango", "apple", "banana"]
Asynchronous JavaScript, JavaScript işlemlerinin arka planda yürütülmesini sağlar. Bu sayede kullanıcı arayüzü daha hızlı ve etkili bir şekilde çalışır. Asynchronous JavaScript'in iki temel yapısı vardır: promises ve async/await.
Promises, JavaScript işlemlerinin sonucunu döndürebilen ve hata durumlarını işleyebilen nesnelerdir. Örneğin, bir API çağrısı yaparken sonucun döndüğü zaman ilgili fonksiyon çağırılır. Aşağıdaki örnekte, fetch fonksiyonu ile bir API çağrısı yapılıyor ve sonuç döndüğünde ilgili fonksiyon çağırılıyor:
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
console.log(data);
})
.catch(error => {
console.error(error);
});
Async/await, promises'i daha okunaklı hale getirmek için kullanılan bir yapıdır. Async/await ile işlemler daha sıralı bir şekilde yürütülür ve kod daha okunaklı hale gelir. Aşağıdaki örnekte, async/await ile aynı API çağrısı yapılıyor:
async function getData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
}
getData();
Asynchronous JavaScript, React uygulamalarında sıklıkla kullanılır. Özellikle API çağrıları ve veri yükleme işlemlerinde çok yararlıdır. Bu sebeple, React ile birlikte JavaScript'in asenkron yapısını iyi anlamak önemlidir.
JavaScript Modules, JavaScript uygulamalarının daha organize ve okunaklı hale gelmesini sağlar. Bu sebeple, React uygulamalarında da sıklıkla kullanılır. Özellikle uygulamanızda farklı dosyalarda yer alan fonksiyonları, sınıfları ve değişkenleri daha kolayca kullanabilmenizi sağlar.
Modules'lar import ve export edilir. Örneğin, bir dosya içerisinde tanımladığınız bir değişkeni başka bir dosya içerisinde kullanmak istiyorsanız, o değişkeni export edersiniz ve diğer dosya içerisinde import edersiniz. Aşağıda bir örnek verilmiştir:
// dosya1.js
export const myVariable = "Hello World";
// dosya2.js
import { myVariable } from './dosya1';
console.log(myVariable); // "Hello World"
Ayrıca, export edebileceğiniz fonksiyonlar ve sınıflar da mevcuttur. Örneğin:
// dosya1.js
export function myFunction() {
console.log("Hello World");
}
// dosya2.js
import { myFunction } from './dosya1';
myFunction(); // "Hello World"
JavaScript Modules, React uygulamanızı daha organize ve okunaklı hale getirmenizi sağlar. Ayrıca, uygulamanızın büyüklüğü artarken daha kolay yönetebilmenizi sağlar.
JavaScript dizilerinde verileri düzenlemek için kullanabileceğimiz üç önemli method vardır: map, filter ve reduce.
Map methodu, dizideki her eleman için belirli bir işlem yapar ve yeni bir dizi oluşturur. Örneğin, aşağıdaki kod örneğinde dizideki her sayının karesini alırız.
const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map(number => number * number);
console.log(squaredNumbers); // [1, 4, 9, 16, 25]
Filter methodu ise dizideki elemanları belirli bir kritere göre filtreler ve yeni bir dizi oluşturur. Örneğin, aşağıdaki kod örneğinde dizideki tek sayıları alırız.
const numbers = [1, 2, 3, 4, 5];
const oddNumbers = numbers.filter(number => number % 2 !== 0);
console.log(oddNumbers); // [1, 3, 5]
Reduce methodu ise dizideki elemanları tek bir değere indirir. Örneğin, aşağıdaki kod örneğinde dizideki tüm sayıların toplamını alırız.
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, number) => acc + number, 0);
console.log(sum); // 15
Bu methodlar, React uygulamalarında verileri işlemek ve düzenlemek için oldukça yararlıdır. Örneğin, bir API'dan gelen verileri filtrelemek veya componentler için gerekli olan verileri oluşturmak için kullanabilirsiniz.
Event loop ve concurrency model, JavaScript'te programların nasıl çalıştırıldığının temel prensipleridir. Event loop, JavaScript'te asenkron işlemleri gerçekleştirmek için kullanılan bir mekanizmadır. Bu mekanizma, JavaScript çalışma zamanının nasıl işlediğini anlamak için önemlidir.
Concurrency model ise, JavaScript'te işlemlerin nasıl paralel olarak çalıştırılacağını belirler. JavaScript'te, işlemler JavaScript çalışma zamanı tarafından yürütülür ve bu nedenle, işlemler arasındaki sıra önemlidir.
Event loop ve concurrency model, JavaScript'te özellikle asenkron işlemlerin yürütülmesi sırasında önemlidir. Aşağıda bir örnek verilecektir:
console.log("Start");
setTimeout(() => {
console.log("Timeout");
}, 0);
console.log("End");
Bu kod bloğunda, "Start" ve "End" logları anında yazdırılırken, "Timeout" logu biraz sonra yazdırılır. Bu, event loop'un nasıl çalıştığını gösterir.
Ayrıca, aşağıdaki kod bloğu da concurrency model'i gösterir:
console.log("Start");
Promise.resolve().then(() => {
console.log("Promise");
});
console.log("End");
Bu kod bloğunda, "Start" ve "End" logları anında yazdırılırken, "Promise" logu biraz sonra yazdırılır. Bu, JavaScript çalışma zamanının işlemleri nasıl paralel olarak yürüttüğünü gösterir.
Event loop ve concurrency model, JavaScript'te asenkron işlemlerin nasıl gerçekleştirildiği hakkında bilgi verir. Event loop, JavaScript işletim sistemi tarafından sağlanan bir mekanizmadır ve JavaScript kodunun asenkron olarak çalışmasını sağlar. Concurrency model ise, JavaScript içinde işlemlerin nasıl paralel olarak çalıştırılacağını tanımlar. Örneğin, setTimeout() ve setInterval() gibi asenkron metotlar ile kodunuzda işlemleri zamanlayabilirsiniz. Ayrıca, JavaScript'in Promises ve async/await özellikleri ile asenkron işlemleri yazmak daha kolay hale gelir.
Temel olarak React için öğrenilmesi gereken JavaScript konuları bunlardır.