Sefa Demirtaş

Sefa Demirtaş

#react

React State nedir?

React State nedir?
0 views
3 min read
#react

State kavramı react hook olarak adlandırılan yapılardandır. useState sayfanın herhangi bir yerinde tanımlanan özelliğin değişimi durumunda diğer birleşenleri değiştirmeden tannımlanan özelliğin değişmesini sağlar.

Örnekler *Nextjs, typescript ve tailwind.js kullanılarak uygulanmıştır.

"use client";
import React, { useState } from "react";

const page = () => {
  const [name, setName] = useState < string > "John";
  const [age, setAge] = useState < number > 33;
  return (
    <div className="flex justify-center items-center w-full h-screen flex-col gap-2">
      <ul>
        <li>Selam {name}</li>
        <li>{age}</li>
      </ul>
      <button
        className="block border "
        onClick={() => {
          setName("Candy");
          setAge(32);
        }}
      >
        Click
      </button>
    </div>
  );
};

export default page;
  • Örnekte name ve age değişkenleri useStae olarak tanımlanmış. Yani uygulama aktif ise ve button tuşuna basarsanız sadece ilgili sayfanın name ve age bölümlerinin değiştiğini görürsünüz.

Array State

  • Arrayler usestate olarak tanımlana bilirler. Bu işlemleri yaparken dikkeat etmemiz gereken hususlat
    • Array'in içersindeki değerlerin veri tipleri ile eklen aynı olmalı
    • spread ... dikkat edilmelidir. Bu ifade arrayin içindeki olan önceki verileri yazar. Eklamek istediğniz değeri başa yazarsanız değerden sonra, değeri sona yazarsanız ile baştan öncekş verileri yazacaktır.
"use client";
import React, { useState } from "react";

const page = () => {
  const [name, setName] = useState<string>("John");
  const [age, setAge] = useState<number>(33);
  const [friends, setfriends] = useState<string[]>(["Harry", "Lorem"]);
  return (
    <div>
      <ul>
        <li>Selam {name}</li>
        <li>{age}</li>
        {friends.map((friend, index) => (
          <li key={index}>{friend}</li>
        ))}
      </ul>
      <button
        className="block border "
        onClick={() => {
          setfriends([...friends, "Ipsum"]);
        }}
      >
        Add Friends
      </button>
    </div>
  );
};

export default page;

Object State

Object ler ile usestate kullanımı arrayler de kullanımına benzerdir. Önemli olan nokta iw spread operatörüdür. Kullanımda object nesnenizi değişiminde de aynı özelliğe sahip olmasına dikkat etmelisiniz.

"use client";
import React, { useState } from "react";

interface AdressState {
  title: string;
  zip: number;
}

const page = () => {
  const [name, setName] = useState<string>("John");
  const [age, setAge] = useState<number>(33);
  const [friends, setfriends] = useState<string[]>(["Harry", "Lorem"]);
  const [adress, setAdress] = useState<AdressState>({
    title: "Ankara",
    zip: 6590,
  });
  return (
    <div>
      <ul>
        <li>Selam {name}</li>
        <li>{age}</li>
        {friends.map((friend, index) => (
          <li key={index}>{friend}</li>
        ))}
        <li>{adress.title}</li>
        <li>{adress.zip}</li>

      </ul>

      <button
        className="border p-2"
        onClick={() => {
          setAdress({ ...adress, title: "Ipsum" });
        }}
      >
        Change Adress
      </button>
    </div>
  );
};

export default page;

Uygulama bir sayıyı artırmak ve azaltmak

  • incrrease ve decrease adında iki tane fonksiyon tanımlıyoruz. BU fonksiyonlar sayımızı artıracak vr azaltacak. Bu fonksiyonlar tanımlanadanda yazabiliriz. *usestate hook** nasıl çalıştığını anlamamıza yardımcı olacatır.
"use client";
import React, { useState } from "react";

const page = () => {
  const [number, setNumber] = useState<number>(0);

  const decrease = () => {
    setNumber(number - 1);
  };
  const increase = () => {
    setNumber(number + 1);
  };
  return (
    <div>
      <h1 className="text-9xl mb-5 text-center">{number}</h1>

      <div className="flex gap-2 w-full justify-center">
        <button onClick={increase} className="border-2 p-2">
          Artır
        </button>
        <button onClick={decrease} className="border-2 p-2">
          Azalt
        </button>
      </div>
    </div>
  );
};

export default page;

Re-Render Mantığını Anlamak (React vs jQuery)

Aralarındakş temel fark rendering esnasında react gereksiz renderları fark eder ve sayfayı state yenlmemzken JQuery bu konuda hep aynı değeri *render edebilir.