React ES6

React ES6 kullanır ve bazı yeni özelliklere aşina olmalısınız
React ES6
Classes
class Car {
  constructor(name) {
    this.brand = name;
  }
  
  present() {
    return 'I have a ' + this.brand;
  }
}

const mycar = new Car("Ford");
mycar.present();
 
class Car {
  constructor(name) {
    this.brand = name;
  }

  present() {
    return 'I have a ' + this.brand;
  }
}

class Model extends Car {
  constructor(name, mod) {
    super(name);
    this.model = mod;
  }  
  show() {
      return this.present() + ', it is a ' + this.model
  }
}
const mycar = new Model("Ford", "Mustang");
mycar.show();

super() metodu, üst sınıfa (parent class) referans verir.
Yapıcı (constructor) metot içerisinde super() metodunu çağırarak, üst sınıfın yapıcı metodunu çağırır ve üst sınıfın özelliklerine ve metotlarına erişim sağlarız.

Arrow Functions
hello = () => {
  return "Hello World!";
}

hello = (val) => "Hello " + val;

hello = val => "Hello " + val;
 
this  Kullanımı

Normal fonksiyonlara kıyasla, arrow fonksiyonlarında `this` ifadesinin ele alınış biçimi de farklıdır.
Kısacası, arrow fonksiyonlarında `this` bağlamı (binding) oluşmaz.

Normal fonksiyonlarda `this` anahtar sözcüğü, fonksiyonu çağıran nesneyi (örneğin `window`, `document`, bir buton veya herhangi başka bir nesne) temsil ederdi.
Arrow fonksiyonlarında ise `this` anahtar sözcüğü, her zaman arrow fonksiyonunu tanımlayan nesneyi temsil eder.

Aradaki farkı anlamak için iki örneğe göz atalım.

Her iki örnekte de bir metot iki kez çağrılır: ilki sayfa yüklendiğinde, diğeri ise kullanıcı bir butona tıkladığında.
İlk örnekte normal bir fonksiyon, ikinci örnekte ise bir arrow fonksiyonu kullanılır.

Sonuçlar, ilk örneğin iki farklı nesne (`window` ve buton) döndürdüğünü, ikinci örneğin ise `Header` nesnesini iki kez döndürdüğünü göstermektedir.

  Normal bir fonksiyonda this, fonksiyonu çağıran nesneyi temsil eder: [object HTMLButtonElement]
class Header {
  constructor() {
    this.color = "Red";
  }

//Regular function:
  changeColor = function() {
    document.getElementById("demo").innerHTML += this;
  }
}

const myheader = new Header();

//The window object calls the function:
window.addEventListener("load", myheader.changeColor);

//A button object calls the function:
document.getElementById("btn").addEventListener("click", myheader.changeColor);
   Oklu fonksiyon (arrow function) kullanıldığında, `this` —fonksiyonu kim çağırmış olursa olsun— Header nesnesini temsil eder: [object Object]
class Header {
  constructor() {
    this.color = "Red";
  }

//Arrow function:
  changeColor = () => {
    document.getElementById("demo").innerHTML += this;
  }
}

const myheader = new Header();


//The window object calls the function:
window.addEventListener("load", myheader.changeColor);

//A button object calls the function:
document.getElementById("btn").addEventListener("click", myheader.changeColor);
 
Değişkenler
const x = 5.6;
 
const, oluşturulduktan sonra değeri asla değiştirilemeyen bir değişkendir.
const, blok kapsamına (block scope) sahiptir.
const anahtar sözcüğü biraz yanıltıcıdır.
Sabit bir değer tanımlamaz; bir değere yönelik sabit bir referans tanımlar.

Bu nedenle şunları yapamazsınız:
Sabit bir değere yeniden atama yapmak
Sabit bir diziye yeniden atama yapmak
Sabit bir nesneye yeniden atama yapmak

Ancak şunları yapabilirsiniz:
Sabit bir dizinin elemanlarını değiştirmek
Sabit bir nesnenin özelliklerini değiştirmek
 
map() in React
 
const fruitlist = ['apple', 'banana', 'cherry'];

function MyList() {
  return (
    <ul>
      {fruitlist.map(fruit => 
        <li key={fruit}>{fruit}</li>
      )}
    </ul>
  );
}
 
const users = [
  { id: 1, name: 'John', age: 30 },
  { id: 2, name: 'Jane', age: 25 },
  { id: 3, name: 'Bob', age: 35 }
];

function UserList() {
  return (
    <ul>
      {users.map(user => 
        <li key={user.id}>
          {user.name} is {user.age} years old
        </li>
      )}
    </ul>
  );
}
 
map() metodu üç parametre alır:

currentValue - İşlenmekte olan mevcut eleman
index - Mevcut elemanın indeksi (isteğe bağlı)
array - map metodunun üzerinde çağrıldığı dizi (isteğe bağlı)  
const fruitlist = ['apple', 'banana', 'cherry'];

function App() {
  return (
    <ul>
      {fruitlist.map((fruit, index, array) => {
        return (
          <li key={fruit}>
            Name: {fruit}, Index: {index}, Array: {array}
          </li>
        );
      })}
    </ul>
  );
}
 
Dizileri Parçalara Ayırma (Destructuring)
const vehicles = ['mustang', 'f-150', 'expedition'];

// old way
const car = vehicles[0];
const truck = vehicles[1];
const suv = vehicles[2];

const vehicles = ['mustang', 'f-150', 'expedition'];
const [car, truck, suv] = vehicles;

const vehicles = ['mustang', 'f-150', 'expedition'];
const [car,, suv] = vehicles;

function dateInfo(dat) {
  const d = dat.getDate();
  const m = dat.getMonth() + 1;
  const y = dat.getFullYear();

  return [d, m, y];
}
const [date, month, year] = dateInfo(new Date());

 
Objeleri Parçalama (Destructuring Objects)
const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50
};

// Destructuring
let {firstName, lastName, age} = person;

//You can now access each variable separately:
document.getElementById("demo").innerHTML = firstName;
 
const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50
};

// Destructuring
let {firstName} = person;
   
const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50
};

// Destructuring
let {firstName, lastName, age, country = "Norway"} = person;
 
const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  car: {
    brand: 'Ford',
    model: 'Mustang',
  }
};

// Destructuring
let {firstName, car: { brand, model }} = person;

let message = `My name is ${firstName}, and I drive a ${brand} ${model}.`;
 
Props Destructuring
function Greeting({ name, age }) {
  return <h1>Hello, {name}! You are {age} years old.</h1>;
}

function Greeting(props) {
  return <h1>Hello, {props.name}! You are {props.age} years old.</h1>;
}
  
import { createRoot } from 'react-dom/client'

function Greeting({ name, age }) {
  return <h1>Hello, {name}! You are {age} years old.</h1>;
}
  
createRoot(document.getElementById('root')).render(
  <Greeting name="John" age={25} />
);
 
useState Hook Destructuring
import { createRoot, useState } from 'react-dom/client'

function Counter() {
  // Destructuring the array returned by useState
  const [count, setCount] = useState(0);
  
  return (
    <button onClick={() => setCount(count + 1)}>
      Count: {count}
    </button>
  );
}

createRoot(document.getElementById('root')).render(
  <Counter />
);
 
Spread Operator
const numbersOne = [1, 2, 3];
const numbersTwo = [4, 5, 6];
const numbersCombined = [...numbersOne, ...numbersTwo];

//1, 2, 3, 4, 5, 6
  
const numbers = [1, 2, 3, 4, 5, 6];

const [one, two, ...rest] = numbers;

document.write("<p>" + one + "</p>");
document.write("<p>" + two + "</p>");
document.write("<p>" + rest + "</p>");

//1
//2
//3,4,5,6
   
const myVehicle = {
  brand: 'Ford',
  model: 'Mustang',
  color: 'red'
}

const updateMyVehicle = {
  type: 'car',
  year: 2021, 
  color: 'yellow'
}

const myUpdatedVehicle = {...myVehicle, ...updateMyVehicle};

//Object { brand: "Ford", model: "Mustang", color: "yellow", type: "car", year: 2021 }
 
Yükleniyor...