{"id":35237,"date":"2025-11-27T08:40:47","date_gmt":"2025-11-27T05:40:47","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35237"},"modified":"2025-11-27T08:40:47","modified_gmt":"2025-11-27T05:40:47","slug":"react-hooksa-giris-modern-react-gelistirmenin-temelleri","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/","title":{"rendered":"React Hooks&#8217;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri"},"content":{"rendered":"<p><body><\/p>\n<h2>React Hooks&#8217;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri<\/h2>\n<p>React, kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak i\u00e7in deklaratif ve bile\u015fen tabanl\u0131 bir yakla\u015f\u0131m sunan pop\u00fcler bir JavaScript k\u00fct\u00fcphanesidir. Y\u0131llar i\u00e7inde React, geli\u015ftiricilerin karma\u015f\u0131k UI&#8217;lar\u0131 daha y\u00f6netilebilir par\u00e7alara ay\u0131rmas\u0131na olanak tan\u0131yan bir dizi g\u00fc\u00e7l\u00fc \u00f6zellik sunmu\u015ftur. Ancak, React&#8217;in ilk s\u00fcr\u00fcmlerinden beri var olan s\u0131n\u0131f bile\u015fenleri, \u00f6zellikle durum y\u00f6netimi ve yan etkilerin ele al\u0131nmas\u0131 konusunda baz\u0131 zorluklar\u0131 beraberinde getirmi\u015ftir. Bu zorluklar\u0131 a\u015fmak ve fonksiyonel bile\u015fenlerin g\u00fcc\u00fcn\u00fc art\u0131rmak amac\u0131yla React ekibi, 2019&#8217;da React Hooks&#8217;u tan\u0131tt\u0131. Hooks, fonksiyonel bile\u015fenlerde durum (state) ve ya\u015fam d\u00f6ng\u00fcs\u00fc (lifecycle) \u00f6zelliklerini kullanmam\u0131za olanak tan\u0131yan \u00f6zel fonksiyonlard\u0131r. Bu makalede, React Hooks&#8217;un ne oldu\u011funu, neden ortaya \u00e7\u0131kt\u0131\u011f\u0131n\u0131, temel Hooks&#8217;lar\u0131 ve modern React geli\u015ftirmedeki yerini derinlemesine inceleyece\u011fiz.<\/p>\n<h3>Giri\u015f: Neden Hooks&#8217;lara \u0130htiya\u00e7 Duyduk?<\/h3>\n<p>React Hooks&#8217;un ortaya \u00e7\u0131k\u0131\u015f\u0131, s\u0131n\u0131f bile\u015fenlerinin uzun s\u00fcredir devam eden baz\u0131 mimari ve geli\u015ftirme zorluklar\u0131na bir yan\u0131t niteli\u011findeydi. Bu zorluklar\u0131 anlamak, Hooks&#8217;un neden bu kadar \u00f6nemli oldu\u011funu kavramam\u0131z\u0131 sa\u011flar.<\/p>\n<h4>S\u0131n\u0131f Bile\u015fenlerinin Zorluklar\u0131<\/h4>\n<p>React&#8217;in ilk zamanlar\u0131nda, bir bile\u015fende durum y\u00f6netimi veya ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131na ihtiya\u00e7 duydu\u011fumuzda s\u0131n\u0131f bile\u015fenleri kullanmak zorundayd\u0131k. Fonksiyonel bile\u015fenler ise &#8220;stateless&#8221; (durumsuz) ve &#8220;presentational&#8221; (sunumsal) bile\u015fenler olarak kabul ediliyordu. Ancak s\u0131n\u0131f bile\u015fenlerinin baz\u0131 dezavantajlar\u0131 vard\u0131:<\/p>\n<p>*   <strong>Mant\u0131k Payla\u015f\u0131m\u0131 Zorlu\u011fu:<\/strong> S\u0131n\u0131f bile\u015fenleri aras\u0131nda tekrar kullan\u0131labilir durum mant\u0131\u011f\u0131n\u0131 payla\u015fmak zordu. Bu genellikle &#8220;render props&#8221; veya &#8220;higher-order components (HOCs)&#8221; gibi karma\u015f\u0131k tasar\u0131m desenlerini gerektiriyordu. Bu desenler, bile\u015fen hiyerar\u015fisini derinle\u015ftirerek &#8220;wrapper hell&#8221; olarak bilinen bir soruna yol a\u00e7abiliyordu.<br \/>\n*   <strong>Karma\u015f\u0131k Bile\u015fenler ve Ya\u015fam D\u00f6ng\u00fcs\u00fc Metotlar\u0131:<\/strong> Bile\u015fenler b\u00fcy\u00fcd\u00fck\u00e7e, ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131 (<code>componentDidMount<\/code>, <code>componentDidUpdate<\/code>, <code>componentWillUnmount<\/code>) genellikle birbiriyle alakas\u0131z mant\u0131k par\u00e7alar\u0131n\u0131 i\u00e7eriyordu. \u00d6rne\u011fin, veri \u00e7ekme, olay dinleyicileri ayarlama ve temizleme gibi farkl\u0131 yan etkiler ayn\u0131 ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131na da\u011f\u0131lm\u0131\u015f olabiliyordu. Bu durum, kodu okumay\u0131 ve bak\u0131m\u0131n\u0131 yapmay\u0131 zorla\u015ft\u0131r\u0131yordu.<br \/>\n*   <strong><code>this<\/code> Ba\u011flam\u0131 Sorunu:<\/strong> JavaScript&#8217;teki <code>this<\/code> anahtar kelimesinin davran\u0131\u015f\u0131, \u00f6zellikle React s\u0131n\u0131f bile\u015fenlerinde olay i\u015fleyicileriyle \u00e7al\u0131\u015f\u0131rken kafa kar\u0131\u015ft\u0131r\u0131c\u0131 olabiliyordu. Geli\u015ftiricilerin genellikle olay i\u015fleyicilerini <code>bind<\/code> etmeleri veya ok fonksiyonlar\u0131 kullanmalar\u0131 gerekiyordu, bu da ekstra s\u00f6zdizimi y\u00fck\u00fc ve potansiyel hatalara yol a\u00e7\u0131yordu.<br \/>\n*   <strong>S\u0131n\u0131flar\u0131n Karma\u015f\u0131kl\u0131\u011f\u0131:<\/strong> JavaScript s\u0131n\u0131flar\u0131, prototip tabanl\u0131 kal\u0131t\u0131m gibi baz\u0131 karma\u015f\u0131k kavramlar\u0131 i\u00e7erir. React Hooks, bu karma\u015f\u0131kl\u0131\u011f\u0131 azaltarak daha basit ve anla\u015f\u0131l\u0131r bir API sunmay\u0131 hedefledi.<\/p>\n<h4>Hooks&#8217;lar\u0131n Vaadi<\/h4>\n<p>React Hooks, bu sorunlara zarif ve etkili \u00e7\u00f6z\u00fcmler sunarak modern React geli\u015ftirmenin temelini atm\u0131\u015ft\u0131r. Hooks&#8217;un vaadi \u015funlard\u0131r:<\/p>\n<p>*   <strong>Fonksiyonel Bile\u015fenlerde Durum ve Ya\u015fam D\u00f6ng\u00fcs\u00fc:<\/strong> Hooks, fonksiyonel bile\u015fenlerin durum tutmas\u0131na ve ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131na benzer yan etkileri y\u00f6netmesine olanak tan\u0131r. Bu, neredeyse t\u00fcm React bile\u015fenlerini fonksiyonel olarak yazabilmemiz anlam\u0131na gelir.<br \/>\n*   <strong>Mant\u0131\u011f\u0131 Yeniden Kullan\u0131m:<\/strong> \u00d6zel Hooks&#8217;lar (Custom Hooks) olu\u015fturarak, durumlu mant\u0131\u011f\u0131 bile\u015fenler aras\u0131nda kolayca payla\u015fabiliriz. Bu, &#8220;render props&#8221; veya HOC&#8217;lara k\u0131yasla daha temiz ve daha anla\u015f\u0131l\u0131r bir soyutlama sa\u011flar.<br \/>\n*   <strong>\u0130lgili Mant\u0131\u011f\u0131 Bir Araya Getirme:<\/strong> <code>useEffect<\/code> gibi Hooks&#8217;lar, bir bile\u015fenin ya\u015fam d\u00f6ng\u00fcs\u00fcne da\u011f\u0131lm\u0131\u015f ilgili mant\u0131k par\u00e7alar\u0131n\u0131 (\u00f6rne\u011fin, veri \u00e7ekme ve temizleme) tek bir yerde grupland\u0131rmam\u0131z\u0131 sa\u011flar. Bu, kodu daha okunabilir ve bak\u0131m\u0131 daha kolay hale getirir.<br \/>\n*   <strong><code>this<\/code> Sorununu Ortadan Kald\u0131rma:<\/strong> Fonksiyonel bile\u015fenler <code>this<\/code> anahtar kelimesini kullanmad\u0131\u011f\u0131 i\u00e7in, <code>this<\/code> ba\u011flam\u0131yla ilgili t\u00fcm sorunlar ortadan kalkar.<br \/>\n*   <strong>Daha Az Kod, Daha Anla\u015f\u0131l\u0131r Yap\u0131:<\/strong> Hooks genellikle s\u0131n\u0131f bile\u015fenlerine g\u00f6re daha az ve daha okunabilir kod yazmam\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Hooks Nedir? Temel Kavramlar<\/h3>\n<p>React Hooks, fonksiyonel bile\u015fenlere &#8220;React state ve lifecycle \u00f6zelliklerini eklemenizi sa\u011flayan fonksiyonlard\u0131r.&#8221; Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, bunlar React&#8217;in derinliklerine &#8220;tak\u0131lman\u0131za&#8221; (hook into) izin veren \u00f6zel JavaScript fonksiyonlar\u0131d\u0131r.<\/p>\n<h4>Tan\u0131m ve Ama\u00e7<\/h4>\n<p>Bir Hook, <code>use<\/code> ile ba\u015flayan bir JavaScript fonksiyonudur. \u00d6rne\u011fin, <code>useState<\/code>, <code>useEffect<\/code>, <code>useContext<\/code> gibi. Bu isimlendirme kural\u0131, React&#8217;in \u00e7al\u0131\u015fma zaman\u0131n\u0131n (runtime) bir fonksiyonun Hook olup olmad\u0131\u011f\u0131n\u0131 anlamas\u0131na yard\u0131mc\u0131 olur ve ayn\u0131 zamanda geli\u015ftiricilere de bir ipucu verir.<\/p>\n<p>Hooks&#8217;un temel amac\u0131, fonksiyonel bile\u015fenlerin s\u0131n\u0131f bile\u015fenlerinin sahip oldu\u011fu yeteneklere (durum, ya\u015fam d\u00f6ng\u00fcs\u00fc, ba\u011flam vb.) sahip olmas\u0131n\u0131 sa\u011flamakt\u0131r. B\u00f6ylece, React uygulamalar\u0131n\u0131z\u0131 neredeyse tamamen fonksiyonel bile\u015fenlerle yazabilirsiniz.<\/p>\n<h4>Hooks Kurallar\u0131<\/h4>\n<p>Hooks&#8217;u kullan\u0131rken dikkat etmemiz gereken iki \u00f6nemli kural vard\u0131r. Bu kurallar, React&#8217;in Hooks&#8217;lar\u0131 do\u011fru bir \u015fekilde izlemesini ve bile\u015fenlerimizin \u00f6ng\u00f6r\u00fclebilir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. React, bu kurallar\u0131 ihlal etti\u011finizde genellikle uyar\u0131lar verir.<\/p>\n<h5>Sadece React Fonksiyon Bile\u015fenlerinde \u00c7a\u011f\u0131r\u0131n<\/h5>\n<p>Hooks&#8217;lar\u0131 sadece iki yerde \u00e7a\u011f\u0131rabilirsiniz:<br \/>\n1.  React fonksiyon bile\u015fenlerinin en \u00fcst seviyesinde.<br \/>\n2.  \u00d6zel Hooks&#8217;lar\u0131n en \u00fcst seviyesinde.<\/p>\n<p>Hooks&#8217;lar\u0131 normal JavaScript fonksiyonlar\u0131nda veya s\u0131n\u0131f bile\u015fenlerinde \u00e7a\u011f\u0131ramazs\u0131n\u0131z. Ayr\u0131ca, d\u00f6ng\u00fclerin, ko\u015fullar\u0131n veya i\u00e7 i\u00e7e fonksiyonlar\u0131n i\u00e7inde de \u00e7a\u011f\u0131rmamal\u0131s\u0131n\u0131z.<\/p>\n<h5>En \u00dcst Seviyede \u00c7a\u011f\u0131r\u0131n<\/h5>\n<p>Hooks&#8217;lar\u0131 her zaman fonksiyon bile\u015feninizin veya \u00f6zel Hook&#8217;unuzun en \u00fcst seviyesinde \u00e7a\u011f\u0131rmal\u0131s\u0131n\u0131z. Ko\u015fullu olarak (\u00f6rne\u011fin bir <code>if<\/code> blo\u011fu i\u00e7inde) veya d\u00f6ng\u00fclerin i\u00e7inde bir Hook \u00e7a\u011f\u0131rmamal\u0131s\u0131n\u0131z.<\/p>\n<pre><code class=\"language-jsx\">\/\/ Yanl\u0131\u015f: Hooks'u ko\u015fullu olarak \u00e7a\u011f\u0131r\u0131yorsunuz\nfunction MyComponent(props) {\n  if (props.isLoggedIn) {\n    const [name, setName] = useState('Guest'); \/\/ Hata!\n  }\n  \/\/ ...\n}\n\n\/\/ Do\u011fru: Hooks'u her zaman en \u00fcst seviyede \u00e7a\u011f\u0131r\u0131yorsunuz\nfunction MyComponent(props) {\n  const [name, setName] = useState('Guest'); \/\/ Do\u011fru\n\n  if (props.isLoggedIn) {\n    \/\/ ... mant\u0131k ...\n  }\n  \/\/ ...\n}<\/code><\/pre>\n<p>Bu kural\u0131n nedeni, React&#8217;in her bir Hook \u00e7a\u011fr\u0131s\u0131n\u0131 dahili olarak bir s\u0131raya g\u00f6re izlemesidir. E\u011fer bir Hook&#8217;u ko\u015fullu olarak \u00e7a\u011f\u0131r\u0131rsan\u0131z, bile\u015fenin farkl\u0131 render&#8217;lar\u0131 aras\u0131nda Hook&#8217;lar\u0131n s\u0131ras\u0131 de\u011fi\u015febilir ve bu da hatalara yol a\u00e7abilir.<\/p>\n<h3>Temel Hooks&#8217;lar: Durum ve Ya\u015fam D\u00f6ng\u00fcs\u00fc Y\u00f6netimi<\/h3>\n<p>React Hooks&#8217;un kalbinde, durum y\u00f6netimi ve yan etkileri ele almak i\u00e7in tasarlanm\u0131\u015f iki temel Hook bulunur: <code>useState<\/code> ve <code>useEffect<\/code>.<\/p>\n<h4><code>useState<\/code>: Durum Y\u00f6netimi<\/h4>\n<p><code>useState<\/code>, bir fonksiyonel bile\u015fene durum eklemenizi sa\u011flayan bir Hook&#8217;tur. S\u0131n\u0131f bile\u015fenlerindeki <code>this.state<\/code> ve <code>this.setState<\/code>&#8216;in fonksiyonel bile\u015fenlerdeki kar\u015f\u0131l\u0131\u011f\u0131d\u0131r.<\/p>\n<h5>Kullan\u0131m \u015eekli ve \u00d6rnek<\/h5>\n<p><code>useState<\/code> Hook&#8217;u, durum de\u011fi\u015fkeni ve bu durumu g\u00fcncelleyecek bir fonksiyon i\u00e7eren bir dizi d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\n\nfunction Counter() {\n  \/\/ <code>count<\/code> durum de\u011fi\u015fkeni, <code>setCount<\/code> ise g\u00fcncelleyici fonksiyondur.\n  \/\/ Ba\u015flang\u0131\u00e7 de\u011feri 0'd\u0131r.\n  const [count, setCount] = useState(0);\n\n  return (\n    <div>\n      <p>Say\u0131: {count}<\/p>\n      <button onClick={() => setCount(count + 1)}>Art\u0131r<\/button>\n      <button onClick={() => setCount(count - 1)}>Azalt<\/button>\n    <\/div>\n  );\n}<\/code><\/pre>\n<p>*   <code>useState(0)<\/code>: Hook&#8217;u \u00e7a\u011f\u0131r\u0131rken, durumun ba\u015flang\u0131\u00e7 de\u011ferini (burada <code>0<\/code>) arg\u00fcman olarak verirsiniz.<br \/>\n*   <code>[count, setCount]<\/code>: <code>useState<\/code> bir dizi d\u00f6nd\u00fcr\u00fcr. Dizinin ilk eleman\u0131 mevcut durum de\u011feri (<code>count<\/code>), ikinci eleman\u0131 ise bu durumu g\u00fcncellemek i\u00e7in kullanaca\u011f\u0131n\u0131z fonksiyondur (<code>setCount<\/code>). Bu diziyi do\u011frudan par\u00e7alayarak (<code>array destructuring<\/code>) kullanmak yayg\u0131n bir kal\u0131pt\u0131r.<\/p>\n<p><code>setCount<\/code> fonksiyonunu \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131zda, React bile\u015feni yeni durum de\u011feriyle yeniden render eder.<\/p>\n<h5>Fonksiyonel G\u00fcncellemeler<\/h5>\n<p>Bazen yeni durum, \u00f6nceki duruma ba\u011fl\u0131 olabilir. Bu gibi durumlarda, <code>setCount<\/code> fonksiyonuna do\u011frudan yeni bir de\u011fer vermek yerine, \u00f6nceki durumu alan bir fonksiyon ge\u00e7irmek daha g\u00fcvenlidir. Bu, \u00f6zellikle asenkron g\u00fcncellemelerde veya birden fazla durum g\u00fcncellemesinin ayn\u0131 anda ger\u00e7ekle\u015fti\u011fi durumlarda \u00f6nemlidir.<\/p>\n<pre><code class=\"language-jsx\">function Counter() {\n  const [count, setCount] = useState(0);\n\n  const incrementFive = () => {\n    \/\/ Bu \u015fekilde arka arkaya \u00e7a\u011f\u0131rmak her zaman 5 art\u0131rmayabilir\n    \/\/ setCount(count + 1);\n    \/\/ setCount(count + 1);\n    \/\/ setCount(count + 1);\n    \/\/ setCount(count + 1);\n    \/\/ setCount(count + 1);\n\n    \/\/ Do\u011fru yakla\u015f\u0131m: \u00f6nceki duruma eri\u015fen bir fonksiyon kullanmak\n    for (let i = 0; i < 5; i++) {\n      setCount(prevCount => prevCount + 1);\n    }\n  };\n\n  return (\n    <div>\n      <p>Say\u0131: {count}<\/p>\n      <button onClick={() => setCount(prevCount => prevCount + 1)}>Art\u0131r<\/button>\n      <button onClick={incrementFive}>5 Art\u0131r<\/button>\n    <\/div>\n  );\n}<\/code><\/pre>\n<p><code>setCount(prevCount => prevCount + 1)<\/code> ifadesinde, <code>prevCount<\/code> her zaman en g\u00fcncel durumu temsil eder.<\/p>\n<h5>Ba\u015flang\u0131\u00e7 De\u011feri<\/h5>\n<p><code>useState<\/code>&#8216;e bir ba\u015flang\u0131\u00e7 de\u011feri verirken, e\u011fer bu de\u011ferin hesaplanmas\u0131 pahal\u0131 bir i\u015flemse, do\u011frudan de\u011feri vermek yerine bir fonksiyon ge\u00e7irebilirsiniz. Bu fonksiyon sadece bile\u015fenin ilk render&#8217;\u0131nda \u00e7al\u0131\u015f\u0131r.<\/p>\n<pre><code class=\"language-jsx\">function ExpensiveCalculationComponent() {\n  \/\/ Bu fonksiyon sadece ilk render'da \u00e7al\u0131\u015f\u0131r\n  const [data, setData] = useState(() => {\n    const initialData = someExpensiveCalculation();\n    return initialData;\n  });\n  \/\/ ...\n}<\/code><\/pre>\n<h4><code>useEffect<\/code>: Yan Etkileri Y\u00f6netme<\/h4>\n<p><code>useEffect<\/code> Hook&#8217;u, fonksiyonel bile\u015fenlerde yan etkileri (side effects) y\u00f6netmenizi sa\u011flar. Yan etkiler, bir bile\u015fenin render edilmesinin \u00f6tesindeki eylemlerdir: veri \u00e7ekme, do\u011frudan DOM&#8217;u manip\u00fcle etme, olay dinleyicileri ayarlama veya temizleme, zamanlay\u0131c\u0131lar vb. S\u0131n\u0131f bile\u015fenlerindeki <code>componentDidMount<\/code>, <code>componentDidUpdate<\/code> ve <code>componentWillUnmount<\/code> metotlar\u0131n\u0131n birle\u015fimidir.<\/p>\n<h5>Kullan\u0131m \u015eekli ve \u00d6rnek<\/h5>\n<p><code>useEffect<\/code> iki arg\u00fcman al\u0131r:<br \/>\n1.  Bir yan etki fonksiyonu.<br \/>\n2.  (\u0130ste\u011fe ba\u011fl\u0131) Bir ba\u011f\u0131ml\u0131l\u0131k dizisi.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState, useEffect } from 'react';\n\nfunction DocumentTitleUpdater() {\n  const [count, setCount] = useState(0);\n\n  \/\/ Bu yan etki, <code>count<\/code> her de\u011fi\u015fti\u011finde \u00e7al\u0131\u015f\u0131r.\n  useEffect(() => {\n    document.title = <code>Say\u0131: ${count}<\/code>;\n    console.log('Dok\u00fcman ba\u015fl\u0131\u011f\u0131 g\u00fcncellendi.');\n  }, [count]); \/\/ <code>count<\/code> ba\u011f\u0131ml\u0131l\u0131k dizisinde oldu\u011fu i\u00e7in, <code>count<\/code> de\u011fi\u015fti\u011finde \u00e7al\u0131\u015f\u0131r.\n\n  return (\n    <div>\n      <p>Say\u0131: {count}<\/p>\n      <button onClick={() => setCount(count + 1)}>Art\u0131r<\/button>\n    <\/div>\n  );\n}<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>document.title<\/code>&#8216;\u0131 g\u00fcncelleme bir yan etkidir. <code>useEffect<\/code> i\u00e7inde tan\u0131mlan\u0131r ve <code>count<\/code> de\u011fi\u015fkeni de\u011fi\u015fti\u011finde tekrar \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r.<\/p>\n<h5>Temizleme Fonksiyonu<\/h5>\n<p>Baz\u0131 yan etkiler (\u00f6rne\u011fin olay dinleyicileri, abonelikler, zamanlay\u0131c\u0131lar) bile\u015fen DOM&#8217;dan kald\u0131r\u0131ld\u0131\u011f\u0131nda veya yan etki yeniden \u00e7al\u0131\u015ft\u0131r\u0131lmadan \u00f6nce temizlenmesi gerekir. <code>useEffect<\/code> i\u00e7indeki fonksiyon, bir temizleme fonksiyonu d\u00f6nd\u00fcrebilir. React, bir sonraki render&#8217;dan \u00f6nce veya bile\u015fen unmount edildi\u011finde bu temizleme fonksiyonunu \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState, useEffect } from 'react';\n\nfunction Timer() {\n  const [seconds, setSeconds] = useState(0);\n\n  useEffect(() => {\n    const intervalId = setInterval(() => {\n      setSeconds(prevSeconds => prevSeconds + 1);\n    }, 1000);\n\n    \/\/ Temizleme fonksiyonu: Bile\u015fen unmount edildi\u011finde veya\n    \/\/ useEffect yeniden \u00e7al\u0131\u015fmadan \u00f6nce interval'i temizler.\n    return () => {\n      clearInterval(intervalId);\n      console.log('Interval temizlendi.');\n    };\n  }, []); \/\/ Bo\u015f ba\u011f\u0131ml\u0131l\u0131k dizisi: Sadece ilk render'da \u00e7al\u0131\u015f\u0131r ve bir kez temizlenir.\n\n  return (\n    <div>\n      <p>Ge\u00e7en s\u00fcre: {seconds} saniye<\/p>\n    <\/div>\n  );\n}<\/code><\/pre>\n<h5>Ba\u011f\u0131ml\u0131l\u0131k Dizisi<\/h5>\n<p><code>useEffect<\/code>&#8216;in ikinci arg\u00fcman\u0131 olan ba\u011f\u0131ml\u0131l\u0131k dizisi, Hook&#8217;un ne zaman yeniden \u00e7al\u0131\u015faca\u011f\u0131n\u0131 kontrol etmenizi sa\u011flar.<\/p>\n<p>*   <strong>Bo\u015f Dizi (<code>[]<\/code>):<\/strong> Yan etki sadece bile\u015fenin ilk render&#8217;\u0131nda \u00e7al\u0131\u015f\u0131r ve bir kez temizlenir (e\u011fer bir temizleme fonksiyonu varsa). Bu, <code>componentDidMount<\/code> ve <code>componentWillUnmount<\/code>&#8216;a benzer bir davran\u0131\u015f sa\u011flar.<br \/>\n*   <strong>Belirli Ba\u011f\u0131ml\u0131l\u0131klar (<code>[dep1, dep2]<\/code>):<\/strong> Yan etki, dizideki ba\u011f\u0131ml\u0131l\u0131klardan herhangi biri de\u011fi\u015fti\u011finde yeniden \u00e7al\u0131\u015f\u0131r. Bu, <code>componentDidUpdate<\/code>&#8216;e benzer bir davran\u0131\u015f sa\u011flar. React, bir \u00f6nceki render&#8217;daki ba\u011f\u0131ml\u0131l\u0131k de\u011ferleri ile mevcut render&#8217;daki de\u011ferleri kar\u015f\u0131la\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k Yok (\u0130kinci Arg\u00fcman Yok):<\/strong> Yan etki, her render&#8217;dan sonra \u00e7al\u0131\u015f\u0131r. Bu genellikle istenmeyen bir durumdur ve performans sorunlar\u0131na yol a\u00e7abilir, \u00e7\u00fcnk\u00fc \u00e7o\u011fu yan etkinin her render&#8217;da yeniden \u00e7al\u0131\u015fmas\u0131 gerekmez.<\/p>\n<p>Ba\u011f\u0131ml\u0131l\u0131k dizisini do\u011fru kullanmak \u00e7ok \u00f6nemlidir. Yanl\u0131\u015f ba\u011f\u0131ml\u0131l\u0131klar (eksik veya gereksiz), sonsuz d\u00f6ng\u00fclere, eski verilere eri\u015fime veya performans sorunlar\u0131na yol a\u00e7abilir. ESLint&#8217;in <code>eslint-plugin-react-hooks<\/code> eklentisi, ba\u011f\u0131ml\u0131l\u0131k dizisiyle ilgili olas\u0131 sorunlar\u0131 tespit etmenize yard\u0131mc\u0131 olabilir.<\/p>\n<h3>Di\u011fer Yayg\u0131n Hooks&#8217;lar<\/h3>\n<p><code>useState<\/code> ve <code>useEffect<\/code> temel Hooks&#8217;lar olsa da, React bir dizi ba\u015fka kullan\u0131\u015fl\u0131 Hook da sunar.<\/p>\n<h4><code>useContext<\/code>: Ba\u011flam Y\u00f6netimi<\/h4>\n<p><code>useContext<\/code> Hook&#8217;u, React Context API&#8217;sini fonksiyonel bile\u015fenlerde kullanman\u0131z\u0131 sa\u011flar. Context API, bile\u015fen a\u011fac\u0131nda prop drilling&#8217;den ka\u00e7\u0131narak verileri kolayca iletmek i\u00e7in bir yol sa\u011flar.<\/p>\n<pre><code class=\"language-jsx\">import React, { useContext } from 'react';\n\n\/\/ Bir Context olu\u015ftur\nconst ThemeContext = React.createContext('light');\n\nfunction App() {\n  return (\n    <ThemeContext.Provider value=\"dark\">\n      <Toolbar \/>\n    <\/ThemeContext.Provider>\n  );\n}\n\nfunction Toolbar() {\n  return (\n    <div>\n      <ThemedButton \/>\n    <\/div>\n  );\n}\n\nfunction ThemedButton() {\n  \/\/ useContext ile en yak\u0131n ThemeContext de\u011ferine eri\u015f\n  const theme = useContext(ThemeContext);\n  return <button style={{ background: theme === 'dark' ? '#333' : '#eee', color: theme === 'dark' ? 'white' : 'black' }}>Tema Butonu<\/button>;\n}<\/code><\/pre>\n<p><code>useContext(ThemeContext)<\/code> \u00e7a\u011fr\u0131s\u0131, bile\u015fen a\u011fac\u0131nda yukar\u0131da bulunan en yak\u0131n <code>ThemeContext.Provider<\/code>&#8216;\u0131n <code>value<\/code> de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h4><code>useReducer<\/code>: Karma\u015f\u0131k Durum Mant\u0131\u011f\u0131<\/h4>\n<p><code>useReducer<\/code> Hook&#8217;u, <code>useState<\/code>&#8216;e bir alternatif olarak, daha karma\u015f\u0131k durum mant\u0131\u011f\u0131na sahip oldu\u011funuzda veya birden fazla alt de\u011feri i\u00e7eren durumlar\u0131 y\u00f6netti\u011finizde kullan\u0131l\u0131r. Reducer desenini (Redux&#8217;tan tan\u0131d\u0131k) benimser.<\/p>\n<pre><code class=\"language-jsx\">import React, { useReducer } from 'react';\n\n\/\/ Reducer fonksiyonu: mevcut durumu ve bir eylemi al\u0131r, yeni durumu d\u00f6nd\u00fcr\u00fcr.\nconst initialState = { count: 0 };\n\nfunction reducer(state, action) {\n  switch (action.type) {\n    case 'increment':\n      return { count: state.count + 1 };\n    case 'decrement':\n      return { count: state.count - 1 };\n    case 'reset':\n      return initialState;\n    default:\n      throw new Error();\n  }\n}\n\nfunction CounterWithReducer() {\n  \/\/ useReducer, durumu ve dispatch fonksiyonunu d\u00f6nd\u00fcr\u00fcr.\n  const [state, dispatch] = useReducer(reducer, initialState);\n\n  return (\n    <div>\n      <p>Say\u0131: {state.count}<\/p>\n      <button onClick={() => dispatch({ type: 'increment' })}>Art\u0131r<\/button>\n      <button onClick={() => dispatch({ type: 'decrement' })}>Azalt<\/button>\n      <button onClick={() => dispatch({ type: 'reset' })}>S\u0131f\u0131rla<\/button>\n    <\/div>\n  );\n}<\/code><\/pre>\n<p><code>useReducer<\/code>, <code>useState<\/code>&#8216;e g\u00f6re daha \u00f6ng\u00f6r\u00fclebilir durum g\u00fcncellemeleri sa\u011flar ve test edilmesi daha kolayd\u0131r. \u00d6zellikle bir durumun g\u00fcncellenmesi birden fazla eyleme ba\u011fl\u0131 oldu\u011funda veya durum mant\u0131\u011f\u0131 ba\u015fka bir bile\u015fenden ayr\u0131lmak istendi\u011finde tercih edilir.<\/p>\n<h4><code>useRef<\/code>: Referanslara Eri\u015fme<\/h4>\n<p><code>useRef<\/code> Hook&#8217;u, React bile\u015feninizin ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca kal\u0131c\u0131 olan de\u011fi\u015ftirilebilir bir de\u011fer tutan bir <code>ref<\/code> nesnesi olu\u015fturman\u0131z\u0131 sa\u011flar. En yayg\u0131n kullan\u0131m\u0131, do\u011frudan bir DOM \u00f6\u011fesine eri\u015fmektir.<\/p>\n<pre><code class=\"language-jsx\">import React, { useRef } from 'react';\n\nfunction TextInputWithFocusButton() {\n  const inputEl = useRef(null);\n\n  const onButtonClick = () => {\n    \/\/ <code>current<\/code> \u00f6zelli\u011fi do\u011frudan DOM d\u00fc\u011f\u00fcm\u00fcne eri\u015fir\n    inputEl.current.focus();\n  };\n\n  return (\n    <>\n      <input ref={inputEl} type=\"text\" \/>\n      <button onClick={onButtonClick}>Input'a Odaklan<\/button>\n    <\/>\n  );\n}<\/code><\/pre>\n<p><code>useRef<\/code> sadece DOM referanslar\u0131 i\u00e7in de\u011fil, ayn\u0131 zamanda bir bile\u015fenin render&#8217;lar\u0131 aras\u0131nda de\u011fi\u015fmeden kalmas\u0131 gereken herhangi bir de\u011feri (\u00f6rne\u011fin bir zamanlay\u0131c\u0131 ID&#8217;si) tutmak i\u00e7in de kullan\u0131labilir. <code>useRef<\/code> ile tutulan de\u011ferin g\u00fcncellenmesi bile\u015fenin yeniden render edilmesine neden olmaz.<\/p>\n<h4><code>useMemo<\/code> ve <code>useCallback<\/code>: Performans Optimizasyonu<\/h4>\n<p>Bu Hooks&#8217;lar, pahal\u0131 hesaplamalar\u0131 veya fonksiyonlar\u0131 \u00f6nbelle\u011fe alarak (memoization) performans optimizasyonu i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>useMemo<\/code>:<\/strong> Bir fonksiyonun sonucunu \u00f6nbelle\u011fe al\u0131r. Yaln\u0131zca ba\u011f\u0131ml\u0131l\u0131klar\u0131 de\u011fi\u015fti\u011finde yeniden hesaplar.<\/p>\n<pre><code class=\"language-jsx\">import React, { useMemo, useState } from 'react';\n\n    function ExpensiveComponent({ a, b }) {\n      \/\/ <code>sum<\/code> sadece <code>a<\/code> veya <code>b<\/code> de\u011fi\u015fti\u011finde yeniden hesaplan\u0131r.\n      const sum = useMemo(() => {\n        console.log('Pahal\u0131 hesaplama yap\u0131l\u0131yor...');\n        return a + b;\n      }, [a, b]);\n\n      const [count, setCount] = useState(0);\n\n      return (\n        <div>\n          <p>Toplam: {sum}<\/p>\n          <p>Say\u0131: {count}<\/p>\n          <button onClick={() => setCount(count + 1)}>Say\u0131y\u0131 Art\u0131r<\/button>\n        <\/div>\n      );\n    }<\/code><\/pre>\n<p>    <code>useMemo<\/code> kullanmadan <code>sum<\/code> her render&#8217;da yeniden hesaplanacakt\u0131, <code>useMemo<\/code> ile sadece <code>a<\/code> veya <code>b<\/code> de\u011fi\u015fti\u011finde hesaplan\u0131r.<\/p>\n<p>*   <strong><code>useCallback<\/code>:<\/strong> Bir fonksiyonun kendisini \u00f6nbelle\u011fe al\u0131r. Yaln\u0131zca ba\u011f\u0131ml\u0131l\u0131klar\u0131 de\u011fi\u015fti\u011finde yeniden olu\u015fturur. Bu, \u00f6zellikle alt bile\u015fenlere prop olarak fonksiyonlar ge\u00e7irildi\u011finde ve alt bile\u015fenlerin <code>React.memo<\/code> ile optimize edildi\u011fi durumlarda faydal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState, useCallback, memo } from 'react';\n\n    \/\/ Alt bile\u015fen: Sadece props de\u011fi\u015fti\u011finde yeniden render olur.\n    const Button = memo(({ onClick, children }) => {\n      console.log('Button render edildi:', children);\n      return <button onClick={onClick}>{children}<\/button>;\n    });\n\n    function ParentComponent() {\n      const [count, setCount] = useState(0);\n      const [anotherCount, setAnotherCount] = useState(0);\n\n      \/\/ <code>handleClick<\/code> fonksiyonu sadece <code>count<\/code> de\u011fi\u015fti\u011finde yeniden olu\u015fturulur.\n      const handleClick = useCallback(() => {\n        setCount(count + 1);\n      }, [count]);\n\n      return (\n        <div>\n          <p>Count: {count}<\/p>\n          <p>Another Count: {anotherCount}<\/p>\n          <Button onClick={handleClick}>Art\u0131r<\/Button>\n          <button onClick={() => setAnotherCount(anotherCount + 1)}>Di\u011ferini Art\u0131r<\/button>\n        <\/div>\n      );\n    }<\/code><\/pre>\n<p>    <code>useCallback<\/code> olmadan, <code>ParentComponent<\/code> her render edildi\u011finde <code>handleClick<\/code> fonksiyonu yeniden olu\u015fturulacak ve bu da <code>Button<\/code> bile\u015feninin gereksiz yere yeniden render edilmesine neden olacakt\u0131 (\u00e7\u00fcnk\u00fc <code>onClick<\/code> prop&#8217;u her zaman yeni bir referans olacakt\u0131). <code>useCallback<\/code> ile <code>handleClick<\/code> referans\u0131 ayn\u0131 kal\u0131r, bu da <code>Button<\/code>&#8216;\u0131n <code>anotherCount<\/code> de\u011fi\u015fti\u011finde yeniden render olmas\u0131n\u0131 engeller.<\/p>\n<h3>\u00d6zel Hooks&#8217;lar (Custom Hooks): Mant\u0131k Payla\u015f\u0131m\u0131<\/h3>\n<p>React Hooks&#8217;un en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri, \u00f6zel Hooks&#8217;lar olu\u015fturma yetene\u011fidir. \u00d6zel Hooks&#8217;lar, bile\u015fenler aras\u0131nda tekrar kullan\u0131labilir durumlu mant\u0131\u011f\u0131 payla\u015fman\u0131z\u0131 sa\u011flayan fonksiyonlard\u0131r. <code>use<\/code> ile ba\u015flayan herhangi bir JavaScript fonksiyonu, i\u00e7inde di\u011fer Hooks&#8217;lar\u0131 \u00e7a\u011f\u0131rabiliyorsa bir \u00f6zel Hook olabilir.<\/p>\n<h4>Neden \u00d6zel Hooks&#8217;lar?<\/h4>\n<p>*   <strong>Mant\u0131k Yeniden Kullan\u0131m\u0131:<\/strong> <code>render props<\/code> veya HOC&#8217;lara k\u0131yasla daha temiz bir \u015fekilde durumlu mant\u0131\u011f\u0131 birden fazla bile\u015fen aras\u0131nda payla\u015fman\u0131z\u0131 sa\u011flar.<br \/>\n*   <strong>Kod Organizasyonu:<\/strong> Karma\u015f\u0131k bile\u015fenlerdeki ilgili mant\u0131\u011f\u0131 (\u00f6rne\u011fin, bir formun durumunu y\u00f6netme, bir API&#8217;den veri \u00e7ekme) ayr\u0131 bir fonksiyona ay\u0131rarak kodunuzu daha okunabilir hale getirir.<br \/>\n*   <strong>Soyutlama:<\/strong> Bile\u015fenlerinizin karma\u015f\u0131k uygulama detaylar\u0131ndan soyutlanmas\u0131na yard\u0131mc\u0131 olur, b\u00f6ylece bile\u015fenleriniz sadece UI&#8217;\u0131 render etme sorumlulu\u011funa odaklan\u0131r.<\/p>\n<h4>Olu\u015fturma ve Kullan\u0131m<\/h4>\n<p>Bir \u00f6zel Hook olu\u015fturmak olduk\u00e7a basittir: sadece <code>use<\/code> ile ba\u015flayan bir fonksiyon yaz\u0131n ve i\u00e7inde di\u011fer Hooks&#8217;lar\u0131 (\u00f6rne\u011fin <code>useState<\/code>, <code>useEffect<\/code>) kullan\u0131n.<\/p>\n<h5>\u00d6rnek: <code>useWindowSize<\/code><\/h5>\n<p>Bir pencerenin boyutunu izleyen bir \u00f6zel Hook olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-jsx\">import { useState, useEffect } from 'react';\n\nfunction useWindowSize() {\n  const [windowSize, setWindowSize] = useState({\n    width: undefined,\n    height: undefined,\n  });\n\n  useEffect(() => {\n    function handleResize() {\n      setWindowSize({\n        width: window.innerWidth,\n        height: window.innerHeight,\n      });\n    }\n\n    \/\/ \u0130lk render'da boyutu ayarla\n    handleResize();\n\n    \/\/ Olay dinleyicisini ekle\n    window.addEventListener('resize', handleResize);\n\n    \/\/ Temizleme fonksiyonu: Bile\u015fen unmount edildi\u011finde dinleyiciyi kald\u0131r\n    return () => window.removeEventListener('resize', handleResize);\n  }, []); \/\/ Bo\u015f ba\u011f\u0131ml\u0131l\u0131k dizisi: Sadece ilk render'da \u00e7al\u0131\u015f\u0131r ve bir kez temizlenir.\n\n  return windowSize;\n}\n\n\/\/ Bu \u00f6zel Hook'u bir bile\u015fende kullanma\nfunction MyResponsiveComponent() {\n  const { width, height } = useWindowSize();\n\n  if (width < 768) {\n    return <p>Mobil g\u00f6r\u00fcn\u00fcm: {width}x{height}<\/p>;\n  } else {\n    return <p>Masa\u00fcst\u00fc g\u00f6r\u00fcn\u00fcm: {width}x{height}<\/p>;\n  }\n}<\/code><\/pre>\n<p><code>useWindowSize<\/code> Hook&#8217;u, pencere boyutunu izleme mant\u0131\u011f\u0131n\u0131 kaps\u00fcller. <code>MyResponsiveComponent<\/code> gibi farkl\u0131 bile\u015fenler bu Hook&#8217;u \u00e7a\u011f\u0131rarak bu mant\u0131\u011f\u0131 kolayca yeniden kullanabilir. Her bir \u00e7a\u011fr\u0131 kendi durumuna sahiptir, bu da Hook&#8217;lar\u0131n izole ve tekrar kullan\u0131labilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Hooks ile \u0130lgili En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>Hooks&#8217;u etkili bir \u015fekilde kullanmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 ve ipu\u00e7lar\u0131n\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir.<\/p>\n<p>*   <strong>Durumu Do\u011fru Yap\u0131land\u0131rma:<\/strong> <code>useState<\/code> ile durumu y\u00f6netirken, ilgili durum de\u011ferlerini tek bir nesnede birle\u015ftirmek yerine, genellikle ayr\u0131 ayr\u0131 <code>useState<\/code> \u00e7a\u011fr\u0131lar\u0131 kullanmak daha iyidir. Bu, sadece de\u011fi\u015fen par\u00e7alar\u0131n yeniden render edilmesini sa\u011flar ve mant\u0131\u011f\u0131 daha mod\u00fcler hale getirir. Ancak, <code>useReducer<\/code> karma\u015f\u0131k veya ili\u015fkili durumlar\u0131 y\u00f6netmek i\u00e7in daha uygun olabilir.<br \/>\n*   <strong>Yan Etkileri Anlamak:<\/strong> <code>useEffect<\/code>&#8216;in nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve ba\u011f\u0131ml\u0131l\u0131k dizisinin \u00f6nemini iyi kavray\u0131n. Sonsuz d\u00f6ng\u00fcleri veya eski verilere eri\u015fimi \u00f6nlemek i\u00e7in ba\u011f\u0131ml\u0131l\u0131klar\u0131 do\u011fru bir \u015fekilde belirtin.<br \/>\n*   <strong>Gereksiz Yeniden Olu\u015fturmalar\u0131 \u00d6nleme:<\/strong> <code>useMemo<\/code> ve <code>useCallback<\/code>&#8216;i performans\u0131 optimize etmek i\u00e7in dikkatli kullan\u0131n. Ancak, her \u015feyi memoize etmeye \u00e7al\u0131\u015fmay\u0131n; bazen memoization&#8217;\u0131n kendisi de bir maliyet getirir. Sadece performans darbo\u011fazlar\u0131 tespit edildi\u011finde veya alt bile\u015fenlere sabit referanslar sa\u011flamak gerekti\u011finde kullan\u0131n.<br \/>\n*   <strong>Linting Kurallar\u0131:<\/strong> <code>eslint-plugin-react-hooks<\/code> eklentisini kullan\u0131n. Bu eklenti, Hooks kurallar\u0131n\u0131 (\u00f6rne\u011fin, Hooks&#8217;u ko\u015fullu olarak \u00e7a\u011f\u0131rmama) ve <code>useEffect<\/code> ba\u011f\u0131ml\u0131l\u0131k dizisiyle ilgili olas\u0131 sorunlar\u0131 otomatik olarak tespit eder.<br \/>\n*   <strong>Test Etme:<\/strong> Hooks kullanan bile\u015fenleri test etmek, s\u0131n\u0131f bile\u015fenlerini test etmekten farkl\u0131 de\u011fildir. \u00d6zel Hooks&#8217;lar i\u00e7in <code>react-hooks-testing-library<\/code> gibi ara\u00e7lar, Hook&#8217;lar\u0131n\u0131z\u0131 izole bir \u015fekilde test etmenize yard\u0131mc\u0131 olabilir.<br \/>\n*   <strong>\u0130simlendirme Kurallar\u0131:<\/strong> \u00d6zel Hooks&#8217;lar\u0131n\u0131z\u0131n ad\u0131n\u0131 her zaman <code>use<\/code> ile ba\u015flat\u0131n. Bu, React&#8217;in dahili olarak onlar\u0131 Hook olarak tan\u0131mas\u0131na ve di\u011fer geli\u015ftiricilerin de bunlar\u0131n Hook oldu\u011funu anlamas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h3>S\u0131n\u0131f Bile\u015fenlerinden Hooks&#8217;a Ge\u00e7i\u015f<\/h3>\n<p>React ekibi, Hooks&#8217;u tan\u0131tt\u0131\u011f\u0131nda mevcut s\u0131n\u0131f bile\u015fenlerini yeniden yazmak i\u00e7in bir zorunluluk getirmedi. Hooks tamamen geriye d\u00f6n\u00fck uyumludur ve s\u0131n\u0131f bile\u015fenleriyle birlikte kullan\u0131labilir. Ancak, yeni projelerde Hooks kullanmak ve zamanla mevcut s\u0131n\u0131f bile\u015fenlerini Hooks&#8217;a d\u00f6n\u00fc\u015ft\u00fcrmek genellikle iyi bir uygulamad\u0131r.<\/p>\n<p>*   <strong>Ad\u0131m Ad\u0131m D\u00f6n\u00fc\u015f\u00fcm:<\/strong> T\u00fcm uygulamay\u0131 bir kerede d\u00f6n\u00fc\u015ft\u00fcrmek yerine, k\u00fc\u00e7\u00fck, izole bile\u015fenlerden ba\u015flay\u0131n. <code>useState<\/code> ile durumlar\u0131, <code>useEffect<\/code> ile ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131n\u0131 de\u011fi\u015ftirin.<br \/>\n*   <strong>Avantajlar:<\/strong> Hooks&#8217;a ge\u00e7i\u015f, kod taban\u0131n\u0131z\u0131n daha temiz, daha okunabilir ve daha mod\u00fcler olmas\u0131na yard\u0131mc\u0131 olacakt\u0131r. Mant\u0131k payla\u015f\u0131m\u0131 kolayla\u015facak ve <code>this<\/code> ba\u011flam\u0131 sorunlar\u0131 ortadan kalkacakt\u0131r.<br \/>\n*   <strong>Dikkat Edilmesi Gerekenler:<\/strong> S\u0131n\u0131f bile\u015fenlerindeki baz\u0131 ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131n\u0131n Hooks&#8217;ta do\u011frudan bir kar\u015f\u0131l\u0131\u011f\u0131 yoktur (\u00f6rne\u011fin <code>getDerivedStateFromProps<\/code>, <code>getSnapshotBeforeUpdate<\/code>). Bu durumlar i\u00e7in <code>useEffect<\/code> ve <code>useRef<\/code> gibi Hooks&#8217;larla alternatif \u00e7\u00f6z\u00fcmler \u00fcretmek gerekebilir.<\/p>\n<h3>Sonu\u00e7: React Geli\u015ftirmenin Gelece\u011fi<\/h3>\n<p>React Hooks, React geli\u015ftirme \u015feklimizi k\u00f6kten de\u011fi\u015ftiren devrim niteli\u011finde bir yeniliktir. Fonksiyonel bile\u015fenlere durum ve yan etki y\u00f6netimi yetenekleri kazand\u0131rarak, React kodunu daha okunabilir, daha s\u00fcrd\u00fcr\u00fclebilir ve daha tekrar kullan\u0131labilir hale getirmi\u015ftir. S\u0131n\u0131f bile\u015fenlerinin getirdi\u011fi karma\u015f\u0131kl\u0131klar\u0131 ortadan kald\u0131rarak geli\u015ftirme deneyimini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde iyile\u015ftirmi\u015ftir.<\/p>\n<p><code>useState<\/code> ve <code>useEffect<\/code> gibi temel Hooks&#8217;lar, bir bile\u015fenin durumunu ve ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc y\u00f6netmenin temel ta\u015flar\u0131d\u0131r. <code>useContext<\/code>, <code>useReducer<\/code>, <code>useRef<\/code>, <code>useMemo<\/code> ve <code>useCallback<\/code> gibi di\u011fer Hooks&#8217;lar ise daha spesifik ihtiya\u00e7lar\u0131 kar\u015f\u0131layarak uygulamalar\u0131n performans\u0131n\u0131 ve karma\u015f\u0131k durum y\u00f6netimini optimize etmeye yard\u0131mc\u0131 olur. En \u00f6nemlisi, \u00f6zel Hooks&#8217;lar olu\u015fturma yetene\u011fi, React&#8217;in mant\u0131k payla\u015f\u0131m\u0131n\u0131 ve kod organizasyonunu yeni bir seviyeye ta\u015f\u0131m\u0131\u015ft\u0131r.<\/p>\n<p>Modern React uygulamalar\u0131 art\u0131k b\u00fcy\u00fck \u00f6l\u00e7\u00fcde fonksiyonel bile\u015fenler ve Hooks etraf\u0131nda in\u015fa edilmektedir. Hooks&#8217;u anlamak ve do\u011fru bir \u015fekilde uygulamak, herhangi bir React geli\u015ftiricisi i\u00e7in vazge\u00e7ilmez bir beceri haline gelmi\u015ftir. React ekibi, Hooks&#8217;u tan\u0131tt\u0131\u011f\u0131ndan beri s\u00fcrekli olarak geli\u015ftirmekte ve yeni \u00f6zellikler eklemektedir. Bu da Hooks&#8217;un React ekosistemindeki merkezi rol\u00fcn\u00fcn gelecekte de devam edece\u011finin bir i\u015faretidir. React Hooks&#8217;a hakim olmak, sadece mevcut projelerinizde verimlili\u011finizi art\u0131rmakla kalmayacak, ayn\u0131 zamanda React&#8217;in gelecekteki yeniliklerine de daha kolay uyum sa\u011flaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"React Hooks&#8217;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri\nReact, kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak i\u00e7in deklaratif ve bile\u015fen tabanl\u0131 bir yakl","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[128],"tags":[],"class_list":{"0":"post-35237","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-react","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>React Hooks&#039;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React Hooks&#039;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri\" \/>\n<meta property=\"og:description\" content=\"React Hooks&#039;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri React, kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak i\u00e7in deklaratif ve bile\u015fen tabanl\u0131 bir yakl\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-27T05:40:47+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"React Hooks&#8217;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri\",\"datePublished\":\"2025-11-27T05:40:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/\"},\"wordCount\":2963,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"React\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/\",\"name\":\"React Hooks'a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-27T05:40:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React Hooks&#8217;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"React Hooks'a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/","og_locale":"tr_TR","og_type":"article","og_title":"React Hooks'a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri","og_description":"React Hooks'a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri React, kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak i\u00e7in deklaratif ve bile\u015fen tabanl\u0131 bir yakl","og_url":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-27T05:40:47+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"React Hooks&#8217;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri","datePublished":"2025-11-27T05:40:47+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/"},"wordCount":2963,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["React"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/","url":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/","name":"React Hooks'a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-27T05:40:47+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/react-hooksa-giris-modern-react-gelistirmenin-temelleri\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"React Hooks&#8217;a Giri\u015f: Modern React Geli\u015ftirmenin Temelleri"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35237"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35237\/revisions"}],"predecessor-version":[{"id":35238,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35237\/revisions\/35238"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}