{"id":37190,"date":"2025-12-28T17:40:46","date_gmt":"2025-12-28T14:40:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37190"},"modified":"2025-12-28T17:40:46","modified_gmt":"2025-12-28T14:40:46","slug":"reactte-refler-icin-bir-kilavuz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/","title":{"rendered":"React&#8217;te Refler \u0130\u00e7in Bir K\u0131lavuz"},"content":{"rendered":"<p><body><\/p>\n<h2>React&#8217;te Refler \u0130\u00e7in Bir K\u0131lavuz<\/h2>\n<p>React, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in deklaratif bir yakla\u015f\u0131m sunar. Bile\u015fenlerin durumu (state) ve \u00f6zellikler (props) arac\u0131l\u0131\u011f\u0131yla veri ak\u0131\u015f\u0131n\u0131 y\u00f6neterek kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc tan\u0131mlar\u0131z. Ancak, bazen React&#8217;in deklaratif do\u011fas\u0131n\u0131n d\u0131\u015f\u0131na \u00e7\u0131kmam\u0131z ve do\u011frudan DOM elementleriyle veya bir bile\u015fenin \u00f6rne\u011fiyle etkile\u015fime ge\u00e7memiz gerekebilir. \u0130\u015fte tam bu noktada &#8220;Refler&#8221; (Refs) devreye girer. Refler, React bile\u015fenleri i\u00e7inde belirli bir DOM elementine veya bir s\u0131n\u0131f bile\u015feninin \u00f6rne\u011fine do\u011frudan referans almam\u0131z\u0131 sa\u011flayan bir &#8220;ka\u00e7\u0131\u015f kap\u0131s\u0131&#8221; (escape hatch) g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<p>Bu k\u0131lavuzda, React&#8217;te ref kavram\u0131n\u0131 derinlemesine inceleyecek, farkl\u0131 ref t\u00fcrlerini, kullan\u0131m senaryolar\u0131n\u0131, en iyi pratikleri ve ka\u00e7\u0131n\u0131lmas\u0131 gereken yayg\u0131n hatalar\u0131 ele alaca\u011f\u0131z. Amac\u0131m\u0131z, ref&#8217;leri ne zaman ve nas\u0131l etkili bir \u015fekilde kullanaca\u011f\u0131n\u0131z\u0131 anlaman\u0131za yard\u0131mc\u0131 olmakt\u0131r.<\/p>\n<h3>Ref Nedir ve Neden \u0130htiya\u00e7 Duyar\u0131z?<\/h3>\n<p>React&#8217;in temel felsefesi, UI&#8217;\u0131 uygulaman\u0131n durumunun bir fonksiyonu olarak g\u00f6rmektir. Yani, <code>UI = f(state, props)<\/code>. \u00c7o\u011fu zaman, bir bile\u015fenin g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc ve davran\u0131\u015f\u0131n\u0131 state ve props arac\u0131l\u0131\u011f\u0131yla y\u00f6netiriz. \u00d6rne\u011fin, bir input alan\u0131n\u0131n de\u011ferini veya bir d\u00fc\u011fmenin aktif\/pasif durumunu state ile kontrol ederiz.<\/p>\n<p>Ancak, baz\u0131 durumlar vard\u0131r ki React&#8217;in veri ak\u0131\u015f\u0131 modeli, ihtiyac\u0131m\u0131z olan kontrol\u00fc sa\u011flamaz. Bu durumlar genellikle a\u015fa\u011f\u0131daki kategorilere ayr\u0131l\u0131r:<\/p>\n<ul>\n<li><strong>DOM Elementlerini Y\u00f6netme:<\/strong> Bir input alan\u0131na odaklanmak (focus), metin se\u00e7imi yapmak, medya oynatmay\u0131 ba\u015flatmak\/durdurmak veya bir animasyonu tetiklemek gibi do\u011frudan DOM API&#8217;leri ile etkile\u015fim gerektiren i\u015flemler.<\/li>\n<li><strong>Zorunlu Animasyonlar:<\/strong> React&#8217;in kendi animasyon mekanizmalar\u0131n\u0131n yetersiz kald\u0131\u011f\u0131 veya \u00fc\u00e7\u00fcnc\u00fc parti animasyon k\u00fct\u00fcphanelerinin do\u011frudan DOM manip\u00fclasyonu gerektirdi\u011fi durumlar.<\/li>\n<li><strong>\u00dc\u00e7\u00fcnc\u00fc Parti DOM K\u00fct\u00fcphaneleriyle Entegrasyon:<\/strong> D3.js, Chart.js gibi do\u011frudan DOM&#8217;u manip\u00fcle eden k\u00fct\u00fcphaneleri React uygulamalar\u0131na entegre ederken, bu k\u00fct\u00fcphanelerin \u00e7al\u0131\u015faca\u011f\u0131 belirli bir DOM elementine referans sa\u011flamam\u0131z gerekebilir.<\/li>\n<li><strong>Bir Child Component&#8217;in Metodlar\u0131na Eri\u015fme:<\/strong> Nadiren de olsa, bir \u00fcst bile\u015fenden alt bile\u015fenin belirli bir metodunu \u00e7a\u011f\u0131rmam\u0131z veya alt bile\u015fenin i\u00e7 state&#8217;ine\/davran\u0131\u015f\u0131na eri\u015fmemiz gerekebilir (\u00f6rne\u011fin, bir video oynat\u0131c\u0131n\u0131n <code>play()<\/code> metodunu \u00e7a\u011f\u0131rmak).<\/li>\n<\/ul>\n<p>Refler, bu t\u00fcr senaryolarda React&#8217;in deklaratif modelinden ge\u00e7ici olarak ayr\u0131lmam\u0131z\u0131 ve zorunlu (imperative) kod yazmam\u0131z\u0131 sa\u011flayan bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<h3>Ref Olu\u015fturma ve Eri\u015fme<\/h3>\n<p>React&#8217;te ref olu\u015fturman\u0131n ve bunlara eri\u015fmenin birka\u00e7 yolu vard\u0131r. Temelde, bir ref olu\u015fturduktan sonra, onu bir React elementine (<code><\/p>\n<div ref={myRef}><\/code>) veya bir bile\u015fene (<code><MyComponent ref={myRef}><\/code>) atar\u0131z. React, bu ref&#8217;i ilgili DOM elementi veya bile\u015fen \u00f6rne\u011fiyle doldurur.<\/p>\n<h4><code>React.createRef()<\/code> (S\u0131n\u0131f Bile\u015fenleri i\u00e7in)<\/h4>\n<p>S\u0131n\u0131f bile\u015fenlerinde ref olu\u015fturman\u0131n standart yolu <code>React.createRef()<\/code> metodunu kullanmakt\u0131r. Bu metot, bile\u015fen olu\u015fturuldu\u011funda bir ref nesnesi d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-jsx\">\nimport React, { Component } from 'react';\n\nclass MyClassComponent extends Component {\n  constructor(props) {\n    super(props);\n    this.myInputRef = React.createRef(); \/\/ Ref olu\u015fturma\n  }\n\n  componentDidMount() {\n    \/\/ Bile\u015fen DOM'a ba\u011fland\u0131\u011f\u0131nda input'a odaklan\n    this.myInputRef.current.focus();\n  }\n\n  render() {\n    return (\n      <div>\n        <input type=\"text\" ref={this.myInputRef} \/> {\/<em> Ref'i elemente atama <\/em>\/}\n        <button onClick={() => this.myInputRef.current.blur()}>Oda\u011f\u0131 Kald\u0131r<\/button>\n      <\/div>\n    );\n  }\n}\n\nexport default MyClassComponent;\n<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte:<\/p>\n<ul>\n<li><code>this.myInputRef = React.createRef();<\/code> ile bir ref nesnesi olu\u015fturduk.<\/li>\n<li><code><input type=\"text\" ref={this.myInputRef} \/><\/code> ile bu ref&#8217;i input elementine atad\u0131k.<\/li>\n<li><code>componentDidMount<\/code> i\u00e7inde <code>this.myInputRef.current.focus();<\/code> ile ref&#8217;e atanan DOM elementine eri\u015ferek <code>focus()<\/code> metodunu \u00e7a\u011f\u0131rd\u0131k.<\/li>\n<\/ul>\n<p>Ref nesnesinin <code>current<\/code> \u00f6zelli\u011fi, ref&#8217;in atand\u0131\u011f\u0131 DOM elementini veya bile\u015fen \u00f6rne\u011fini tutar. React, DOM&#8217;a bir element ba\u011fland\u0131\u011f\u0131nda <code>current<\/code> \u00f6zelli\u011fini doldurur ve element ayr\u0131ld\u0131\u011f\u0131nda <code>null<\/code> yapar.<\/p>\n<h4><code>useRef()<\/code> Hook (Fonksiyonel Bile\u015fenler i\u00e7in)<\/h4>\n<p>Fonksiyonel bile\u015fenlerde ref kullanmak i\u00e7in <code>useRef<\/code> hook&#8217;unu kullan\u0131r\u0131z. <code>useRef<\/code> hook&#8217;u, <code>React.createRef()<\/code>&#8216;e benzer bir ref nesnesi d\u00f6nd\u00fcr\u00fcr, ancak fonksiyonel bile\u015fenlerin ya\u015fam d\u00f6ng\u00fcs\u00fcne uygun olarak \u00e7al\u0131\u015f\u0131r.<\/p>\n<pre><code class=\"language-jsx\">\nimport React, { useRef, useEffect } from 'react';\n\nfunction MyFunctionalComponent() {\n  const myInputRef = useRef(null); \/\/ Ref olu\u015fturma, ba\u015flang\u0131\u00e7 de\u011feri null\n\n  useEffect(() => {\n    \/\/ Bile\u015fen DOM'a ba\u011fland\u0131\u011f\u0131nda input'a odaklan\n    if (myInputRef.current) {\n      myInputRef.current.focus();\n    }\n  }, []); \/\/ Sadece bir kere \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011fla (componentDidMount benzeri)\n\n  const handleClick = () => {\n    if (myInputRef.current) {\n      alert('Input de\u011feri: ' + myInputRef.current.value);\n    }\n  };\n\n  return (\n    <div>\n      <input type=\"text\" ref={myInputRef} \/> {\/<em> Ref'i elemente atama <\/em>\/}\n      <button onClick={handleClick}>De\u011feri G\u00f6ster<\/button>\n    <\/div>\n  );\n}\n\nexport default MyFunctionalComponent;\n<\/code><\/pre>\n<p><code>useRef<\/code>&#8216;in \u00f6nemli bir \u00f6zelli\u011fi, sadece DOM referanslar\u0131 i\u00e7in de\u011fil, ayn\u0131 zamanda render&#8217;lar aras\u0131nda de\u011fi\u015fmeden kalmas\u0131 gereken herhangi bir mutable de\u011feri saklamak i\u00e7in de kullan\u0131labilmesidir. <code>useRef<\/code> taraf\u0131ndan d\u00f6nd\u00fcr\u00fclen ref nesnesi, <code>.current<\/code> \u00f6zelli\u011fi her zaman ayn\u0131 nesneye i\u015faret etti\u011fi i\u00e7in, bir state gibi re-render tetiklemeden de\u011ferini de\u011fi\u015ftirebilirsiniz.<\/p>\n<pre><code class=\"language-jsx\">\nimport React, { useRef, useState } from 'react';\n\nfunction Counter() {\n  const [count, setCount] = useState(0);\n  const renderCount = useRef(0); \/\/ Render say\u0131s\u0131n\u0131 tutmak i\u00e7in ref\n\n  \/\/ Her render'da renderCount.current de\u011ferini art\u0131r\n  renderCount.current = renderCount.current + 1;\n\n  return (\n    <div>\n      <p>Count: {count}<\/p>\n      <p>This component has rendered {renderCount.current} times.<\/p>\n      <button onClick={() => setCount(count + 1)}>Increment<\/button>\n    <\/div>\n  );\n}\n\nexport default Counter;\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>renderCount<\/code> bir state olmad\u0131\u011f\u0131 i\u00e7in de\u011feri de\u011fi\u015fti\u011finde bile\u015fen yeniden render edilmez. Ancak, <code>count<\/code> state&#8217;i de\u011fi\u015fti\u011finde bile\u015fen yeniden render edilir ve <code>renderCount.current<\/code> de\u011feri g\u00fcncel haliyle ekranda g\u00f6sterilir. Bu, <code>useRef<\/code>&#8216;in state&#8217;ten farkl\u0131 olarak re-render tetiklememesi \u00f6zelli\u011fini g\u00f6sterir.<\/p>\n<h3>Ref Kullan\u0131m Senaryolar\u0131 Detayl\u0131 \u0130nceleme<\/h3>\n<h4>1. DOM Elementlerini Y\u00f6netme<\/h4>\n<p>En yayg\u0131n ref kullan\u0131m senaryosudur. Bir input&#8217;a otomatik odaklanma, kayd\u0131rma pozisyonunu kontrol etme veya bir elementin boyutunu \u00f6l\u00e7me gibi i\u015flemler i\u00e7in ref&#8217;ler vazge\u00e7ilmezdir.<\/p>\n<pre><code class=\"language-jsx\">\nimport React, { useRef } from 'react';\n\nfunction ScrollToTopButton() {\n  const scrollableDivRef = useRef(null);\n\n  const scrollToTop = () => {\n    if (scrollableDivRef.current) {\n      scrollableDivRef.current.scrollTop = 0; \/\/ En \u00fcste kayd\u0131r\n    }\n  };\n\n  return (\n    <div>\n      <div\n        ref={scrollableDivRef}\n        style={{ height: '200px', overflowY: 'scroll', border: '1px solid black' }}\n      >\n        <p>\u00c7ok uzun bir i\u00e7erik...<\/p>\n        <p>...<\/p>\n        <p>...<\/p>\n        <p>...<\/p>\n        <p>...<\/p>\n        <p>...<\/p>\n        <p>Daha fazla i\u00e7erik...<\/p>\n      <\/div>\n      <button onClick={scrollToTop}>Ba\u015fa Kayd\u0131r<\/button>\n    <\/div>\n  );\n}\n\nexport default ScrollToTopButton;\n<\/code><\/pre>\n<h4>2. \u00dc\u00e7\u00fcnc\u00fc Parti K\u00fct\u00fcphanelerle Entegrasyon<\/h4>\n<p>React, sanal DOM ile \u00e7al\u0131\u015f\u0131rken, baz\u0131 k\u00fct\u00fcphaneler do\u011frudan ger\u00e7ek DOM&#8217;u manip\u00fcle eder. Bu k\u00fct\u00fcphaneleri React ile kullan\u0131rken, k\u00fct\u00fcphanenin \u00e7al\u0131\u015faca\u011f\u0131 bir DOM elementine ref arac\u0131l\u0131\u011f\u0131yla eri\u015fim sa\u011flamam\u0131z gerekir.<\/p>\n<pre><code class=\"language-jsx\">\nimport React, { useRef, useEffect } from 'react';\nimport Chart from 'chart.js\/auto'; \/\/ \u00d6rnek bir \u00fc\u00e7\u00fcnc\u00fc parti k\u00fct\u00fcphane\n\nfunction ChartComponent() {\n  const chartRef = useRef(null);\n  const chartInstance = useRef(null); \/\/ Chart \u00f6rne\u011fini saklamak i\u00e7in\n\n  useEffect(() => {\n    if (chartRef.current) {\n      \/\/ \u00d6nceki chart \u00f6rne\u011fini yok et (e\u011fer varsa)\n      if (chartInstance.current) {\n        chartInstance.current.destroy();\n      }\n\n      \/\/ Yeni bir Chart.js grafi\u011fi olu\u015ftur\n      chartInstance.current = new Chart(chartRef.current, {\n        type: 'bar',\n        data: {\n          labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],\n          datasets: [{\n            label: '# of Votes',\n            data: [12, 19, 3, 5, 2, 3],\n            backgroundColor: [\n              'rgba(255, 99, 132, 0.2)',\n              'rgba(54, 162, 235, 0.2)',\n              'rgba(255, 206, 86, 0.2)',\n              'rgba(75, 192, 192, 0.2)',\n              'rgba(153, 102, 255, 0.2)',\n              'rgba(255, 159, 64, 0.2)'\n            ],\n            borderColor: [\n              'rgba(255, 99, 132, 1)',\n              'rgba(54, 162, 235, 1)',\n              'rgba(255, 206, 86, 1)',\n              'rgba(75, 192, 192, 1)',\n              'rgba(153, 102, 255, 1)',\n              'rgba(255, 159, 64, 1)'\n            ],\n            borderWidth: 1\n          }]\n        },\n        options: {\n          scales: {\n            y: {\n              beginAtZero: true\n            }\n          }\n        }\n      });\n    }\n\n    \/\/ Bile\u015fen unmount edildi\u011finde chart'\u0131 yok et\n    return () => {\n      if (chartInstance.current) {\n        chartInstance.current.destroy();\n      }\n    };\n  }, []); \/\/ Sadece bir kere \u00e7al\u0131\u015f\n\n  return (\n    <div style={{ width: '400px', height: '400px' }}>\n      <canvas ref={chartRef}><\/canvas>\n    <\/div>\n  );\n}\n\nexport default ChartComponent;\n<\/code><\/pre>\n<h4>3. Bir Child Component&#8217;in Metodlar\u0131na Eri\u015fme (<code>forwardRef<\/code> ve <code>useImperativeHandle<\/code>)<\/h4>\n<p>Normalde, bir \u00fcst bile\u015fen alt bile\u015fenin i\u00e7 detaylar\u0131na eri\u015femez. Ancak baz\u0131 \u00f6zel durumlarda, bir alt bile\u015fenin belirli metodlar\u0131n\u0131 veya \u00f6zelliklerini d\u0131\u015far\u0131ya a\u00e7mak isteyebiliriz. Bu, \u00f6zellikle alt bile\u015fen bir DOM elementi yerine kendi i\u00e7inde mant\u0131k bar\u0131nd\u0131ran bir React bile\u015feni oldu\u011funda ge\u00e7erlidir.<\/p>\n<h5><code>forwardRef<\/code> (Refleri \u0130letme)<\/h5>\n<p>React bile\u015fenleri varsay\u0131lan olarak <code>ref<\/code> prop&#8217;unu alt bile\u015fenlerine iletmez. Bir bile\u015fene <code>ref<\/code> atad\u0131\u011f\u0131n\u0131zda, bu ref do\u011frudan bile\u015fenin k\u00f6k DOM elementine atan\u0131r (e\u011fer bile\u015fen bir DOM elementi d\u00f6nd\u00fcr\u00fcyorsa) veya bir hata verir (e\u011fer bile\u015fen bir fonksiyonel bile\u015fen ise ve <code>forwardRef<\/code> kullan\u0131lmam\u0131\u015fsa). <code>forwardRef<\/code>, bir \u00fcst bile\u015fenden gelen ref&#8217;i bir alt bile\u015fenin i\u00e7indeki bir DOM elementine veya ba\u015fka bir React bile\u015fenine iletmemizi sa\u011flar.<\/p>\n<pre><code class=\"language-jsx\">\nimport React, { forwardRef, useRef } from 'react';\n\n\/\/ Alt bile\u015fen: MyInput\n\/\/ forwardRef kullanarak ref'i props olarak alabiliriz\nconst MyInput = forwardRef((props, ref) => {\n  return <input type=\"text\" ref={ref} {...props} \/>;\n});\n\n\/\/ \u00dcst bile\u015fen: ParentComponent\nfunction ParentComponent() {\n  const inputRef = useRef(null);\n\n  const focusInput = () => {\n    if (inputRef.current) {\n      inputRef.current.focus(); \/\/ MyInput i\u00e7indeki ger\u00e7ek input elementine odaklan\n    }\n  };\n\n  return (\n    <div>\n      <MyInput ref={inputRef} placeholder=\"Ad\u0131n\u0131z\u0131 girin\" \/>\n      <button onClick={focusInput}>Input'a Odaklan<\/button>\n    <\/div>\n  );\n}\n\nexport default ParentComponent;\n<\/code><\/pre>\n<p>Burada <code>MyInput<\/code> bile\u015feni, <code>forwardRef<\/code> sayesinde <code>ParentComponent<\/code>&#8216;ten gelen <code>inputRef<\/code>&#8216;i kendi i\u00e7indeki <code><input><\/code> elementine iletebiliyor.<\/p>\n<h5><code>useImperativeHandle<\/code> (Fonksiyonel Bile\u015fenlerde \u0130\u00e7 Metodlar\u0131 A\u00e7\u0131\u011fa \u00c7\u0131karma)<\/h5>\n<p><code>forwardRef<\/code> ile birlikte kullan\u0131lan <code>useImperativeHandle<\/code> hook&#8217;u, bir fonksiyonel bile\u015fenden d\u0131\u015far\u0131ya, ref arac\u0131l\u0131\u011f\u0131yla eri\u015filebilecek belirli metodlar\u0131 veya de\u011ferleri \u00f6zelle\u015ftirmemizi sa\u011flar. Bu, alt bile\u015fenin i\u00e7 detaylar\u0131n\u0131 gizlerken, d\u0131\u015far\u0131ya sadece ihtiya\u00e7 duyulan aray\u00fcz\u00fc sunmak i\u00e7in harika bir yoldur.<\/p>\n<pre><code class=\"language-jsx\">\nimport React, { forwardRef, useRef, useImperativeHandle, useState } from 'react';\n\n\/\/ Alt bile\u015fen: CustomInput\nconst CustomInput = forwardRef((props, ref) => {\n  const [value, setValue] = useState('');\n  const inputEl = useRef(null);\n\n  \/\/ useImperativeHandle ile d\u0131\u015far\u0131ya a\u00e7\u0131lacak metodlar\u0131 tan\u0131ml\u0131yoruz\n  useImperativeHandle(ref, () => ({\n    focus: () => {\n      inputEl.current.focus(); \/\/ \u0130\u00e7teki input elementine odaklan\n    },\n    clear: () => {\n      setValue(''); \/\/ Input de\u011ferini temizle\n    },\n    getValue: () => {\n      return value; \/\/ Mevcut de\u011feri d\u00f6nd\u00fcr\n    }\n  }));\n\n  return (\n    <input\n      type=\"text\"\n      ref={inputEl} \/\/ Ger\u00e7ek DOM input elementine referans\n      value={value}\n      onChange={(e) => setValue(e.target.value)}\n      {...props}\n    \/>\n  );\n});\n\n\/\/ \u00dcst bile\u015fen: App\nfunction App() {\n  const customInputRef = useRef(null);\n\n  const handleFocus = () => {\n    if (customInputRef.current) {\n      customInputRef.current.focus(); \/\/ CustomInput'\u0131n focus metodunu \u00e7a\u011f\u0131r\n    }\n  };\n\n  const handleClear = () => {\n    if (customInputRef.current) {\n      customInputRef.current.clear(); \/\/ CustomInput'\u0131n clear metodunu \u00e7a\u011f\u0131r\n    }\n  };\n\n  const handleGetValue = () => {\n    if (customInputRef.current) {\n      alert('Input de\u011feri: ' + customInputRef.current.getValue());\n    }\n  };\n\n  return (\n    <div>\n      <CustomInput ref={customInputRef} placeholder=\"Bir \u015feyler yaz\u0131n...\" \/>\n      <button onClick={handleFocus}>Odaklan<\/button>\n      <button onClick={handleClear}>Temizle<\/button>\n      <button onClick={handleGetValue}>De\u011feri Al<\/button>\n    <\/div>\n  );\n}\n\nexport default App;\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>CustomInput<\/code> bile\u015feni i\u00e7indeki <code>inputEl<\/code> ref&#8217;i do\u011frudan d\u0131\u015far\u0131ya a\u00e7mak yerine, <code>useImperativeHandle<\/code> kullanarak <code>focus<\/code>, <code>clear<\/code> ve <code>getValue<\/code> gibi spesifik metodlar\u0131 <code>customInputRef.current<\/code> \u00fczerinden eri\u015filebilir hale getirdik. Bu, alt bile\u015fenin implementasyon detaylar\u0131n\u0131 gizlerken, \u00fcst bile\u015fene kontroll\u00fc bir aray\u00fcz sunar.<\/p>\n<h3>Callback Refleri<\/h3>\n<p>Daha eski bir y\u00f6ntem olmas\u0131na ra\u011fmen, callback ref&#8217;leri hala ge\u00e7erli ve baz\u0131 durumlarda daha esnek olabilir. Callback ref&#8217;leri, ref&#8217;in ayarland\u0131\u011f\u0131 ve s\u0131f\u0131rland\u0131\u011f\u0131 anlar \u00fczerinde daha fazla kontrol sa\u011flar.<\/p>\n<pre><code class=\"language-jsx\">\nimport React, { useState, useEffect } from 'react';\n\nfunction CallbackRefComponent() {\n  const [height, setHeight] = useState(0);\n  let myDivElement = null; \/\/ DOM elementini saklamak i\u00e7in de\u011fi\u015fken\n\n  const setMyDivRef = (element) => {\n    myDivElement = element; \/\/ Callback \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda element buraya atan\u0131r\n    if (myDivElement) {\n      console.log('Div elementi ayarland\u0131:', myDivElement);\n    }\n  };\n\n  useEffect(() => {\n    \/\/ Bile\u015fen mount edildi\u011finde veya g\u00fcncellendi\u011finde y\u00fcksekli\u011fi \u00f6l\u00e7\n    if (myDivElement) {\n      setHeight(myDivElement.clientHeight);\n    }\n  }, [myDivElement]); \/\/ myDivElement de\u011fi\u015fti\u011finde tetiklenir\n\n  return (\n    <div>\n      <div ref={setMyDivRef} style={{ border: '1px solid blue', padding: '20px' }}>\n        <p>Bu div'in y\u00fcksekli\u011fi:<\/p>\n        <p>{height}px<\/p>\n        <p>Daha fazla i\u00e7erik ekleyelim...<\/p>\n      <\/div>\n      <button onClick={() => {\n        \/\/ Callback ref kullan\u0131larak DOM elementine do\u011frudan eri\u015fim\n        if (myDivElement) {\n          myDivElement.style.backgroundColor = 'lightblue';\n        }\n      }}>Arka Plan\u0131 De\u011fi\u015ftir<\/button>\n    <\/div>\n  );\n}\n\nexport default CallbackRefComponent;\n<\/code><\/pre>\n<p>Callback ref&#8217;leri, ref&#8217;in atand\u0131\u011f\u0131 veya s\u0131f\u0131rland\u0131\u011f\u0131 zamanlarda belirli eylemleri ger\u00e7ekle\u015ftirmek istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r. \u00d6zellikle, ref&#8217;in bir elementten ayr\u0131ld\u0131\u011f\u0131 (unmount) an\u0131 yakalamak i\u00e7in <code>useEffect<\/code>&#8216;in temizleme fonksiyonu ile birlikte kullan\u0131labilirler.<\/p>\n<h3>Ref Kullan\u0131m\u0131nda Dikkat Edilmesi Gerekenler ve En \u0130yi Pratikler<\/h3>\n<p>Refler g\u00fc\u00e7l\u00fc ara\u00e7lar olsa da, React&#8217;in deklaratif do\u011fas\u0131na ayk\u0131r\u0131 olduklar\u0131 i\u00e7in dikkatli kullan\u0131lmal\u0131d\u0131r. Genellikle, bir g\u00f6revi state ve props kullanarak \u00e7\u00f6zemedi\u011finizde bir &#8220;ka\u00e7\u0131\u015f kap\u0131s\u0131&#8221; olarak d\u00fc\u015f\u00fcn\u00fclmelidirler.<\/p>\n<h4>1. Refs&#8217;i &#8220;Ka\u00e7\u0131\u015f Kap\u0131s\u0131&#8221; Olarak G\u00f6r\u00fcn<\/h4>\n<p>React&#8217;in temel prensibi deklaratif programlamad\u0131r. Bir bile\u015fenin ne yapmas\u0131 gerekti\u011fini de\u011fil, nas\u0131l g\u00f6r\u00fcnmesi gerekti\u011fini tan\u0131mlars\u0131n\u0131z. State ve props, bu deklaratif modelin temelidir. Refler, bu modelden \u00e7\u0131k\u0131p do\u011frudan DOM&#8217;u veya bir bile\u015fen \u00f6rne\u011fini zorunlu olarak manip\u00fcle etmeniz gerekti\u011finde kullan\u0131l\u0131r. Bu nedenle, bir problemi \u00e7\u00f6zmek i\u00e7in \u00f6nce state ve props kullanmay\u0131 d\u00fc\u015f\u00fcn\u00fcn. E\u011fer bu yeterli de\u011filse, ref&#8217;lere ba\u015fvurun.<\/p>\n<h4>2. Refleri Abartmay\u0131n<\/h4>\n<p>Gereksiz yere ref kullanmak, kodunuzu daha karma\u015f\u0131k, bak\u0131m\u0131 zor ve hatalara a\u00e7\u0131k hale getirebilir. Her zaman ref kullanmadan bir \u00e7\u00f6z\u00fcm olup olmad\u0131\u011f\u0131n\u0131 sorgulay\u0131n. \u00d6rne\u011fin, bir input&#8217;un de\u011ferini almak i\u00e7in ref yerine <code>onChange<\/code> event&#8217;i ile state kullanmak genellikle daha iyi bir yakla\u015f\u0131md\u0131r.<\/p>\n<h4>3. Reflerin Bile\u015fen Ya\u015fam D\u00f6ng\u00fcs\u00fc ile \u0130li\u015fkisi<\/h4>\n<ul>\n<li>Reflerin <code>current<\/code> \u00f6zelli\u011fi, bile\u015fen DOM&#8217;a ba\u011fland\u0131ktan sonra doldurulur. Bu nedenle, s\u0131n\u0131f bile\u015fenlerinde <code>componentDidMount<\/code> i\u00e7inde, fonksiyonel bile\u015fenlerde ise <code>useEffect<\/code> i\u00e7inde ref&#8217;lere eri\u015fmek en g\u00fcvenli yoldur.<\/li>\n<li>Bir bile\u015fen unmount edildi\u011finde, ref&#8217;in <code>current<\/code> \u00f6zelli\u011fi <code>null<\/code> olur. <code>useEffect<\/code>&#8216;in temizleme fonksiyonu, bu durumu yakalamak ve gerekli temizli\u011fi yapmak i\u00e7in kullan\u0131labilir (\u00f6rne\u011fin, \u00fc\u00e7\u00fcnc\u00fc parti bir k\u00fct\u00fcphane taraf\u0131ndan olu\u015fturulan bir \u00f6rne\u011fi yok etmek).<\/li>\n<\/ul>\n<h4>4. Refleri Prop Olarak Ge\u00e7irmeyin<\/h4>\n<p>Refler, \u00f6zel bir React prop&#8217;u olarak ele al\u0131n\u0131r ve normal prop&#8217;lar gibi alt bile\u015fenlere otomatik olarak iletilmez. E\u011fer bir ref&#8217;i bir alt bile\u015fenin DOM elementine veya \u00f6rne\u011fine iletmek istiyorsan\u0131z, <code>React.forwardRef<\/code> kullanmal\u0131s\u0131n\u0131z. Bir ref&#8217;i normal bir prop olarak (\u00f6rne\u011fin, <code>myRefProp={someRef}<\/code>) ge\u00e7irmek, React&#8217;in ref mekanizmas\u0131yla \u00e7ak\u0131\u015fmalara yol a\u00e7abilir ve beklenmedik davran\u0131\u015flara neden olabilir.<\/p>\n<h4>5. Refleri Fonksiyonel Bile\u015fenlere Atarken Dikkat<\/h4>\n<p>Bir fonksiyonel bile\u015fene do\u011frudan ref atayamazs\u0131n\u0131z (<code><MyFunctionalComponent ref={myRef} \/><\/code>). \u00c7\u00fcnk\u00fc fonksiyonel bile\u015fenlerin bir \u00f6rne\u011fi yoktur. E\u011fer bir fonksiyonel bile\u015fenin i\u00e7indeki bir DOM elementine veya <code>useImperativeHandle<\/code> ile d\u0131\u015far\u0131ya a\u00e7t\u0131\u011f\u0131 bir de\u011fere ref ile eri\u015fmek istiyorsan\u0131z, o fonksiyonel bile\u015feni <code>forwardRef<\/code> ile sarmalaman\u0131z gerekir.<\/p>\n<h4>6. Performans Etkisi<\/h4>\n<p>Reflerin kendileri genellikle performans \u00fczerinde b\u00fcy\u00fck bir etkiye sahip de\u011fildir. Ancak, ref arac\u0131l\u0131\u011f\u0131yla yap\u0131lan do\u011frudan DOM manip\u00fclasyonlar\u0131, React&#8217;in sanal DOM mekanizmas\u0131n\u0131 atlad\u0131\u011f\u0131 i\u00e7in dikkatli kullan\u0131lmal\u0131d\u0131r. Gereksiz veya s\u0131k DOM manip\u00fclasyonlar\u0131 performans\u0131 olumsuz etkileyebilir. \u00d6zellikle animasyonlar gibi durumlarda, taray\u0131c\u0131n\u0131n render pipeline&#8217;\u0131n\u0131 anlamak ve <code>requestAnimationFrame<\/code> gibi API&#8217;leri kullanmak \u00f6nemlidir.<\/p>\n<h4>7. G\u00fcvenlik ve Eri\u015filebilirlik<\/h4>\n<p>Do\u011frudan DOM manip\u00fclasyonu yaparken, eri\u015filebilirlik (Accessibility &#8211; A11y) kurallar\u0131na uymaya \u00f6zen g\u00f6sterin. \u00d6rne\u011fin, bir input&#8217;a odaklan\u0131rken, klavye navigasyonu veya ekran okuyucular i\u00e7in uygun etiketlerin ve rollerin oldu\u011fundan emin olun.<\/p>\n<h3>Yayg\u0131n Hatalar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<ul>\n<li><strong><code>ref.current<\/code>&#8216;a eri\u015fmeden \u00f6nce ref&#8217;in ayarlanmam\u0131\u015f olmas\u0131:<\/strong> Ref&#8217;ler, bile\u015fen render edildikten ve DOM&#8217;a ba\u011fland\u0131ktan sonra doldurulur. <code>componentDidMount<\/code> veya <code>useEffect<\/code> i\u00e7inde eri\u015fmeye \u00e7al\u0131\u015f\u0131n.<\/li>\n<li><strong>Fonksiyonel bile\u015fenlerde <code>React.createRef()<\/code> kullanmaya \u00e7al\u0131\u015fmak:<\/strong> Fonksiyonel bile\u015fenler i\u00e7in <code>useRef()<\/code> kullan\u0131n. <code>React.createRef()<\/code> s\u0131n\u0131f bile\u015fenleri i\u00e7indir.<\/li>\n<li><strong>Refleri do\u011frudan fonksiyonel bile\u015fenlere atamak:<\/strong> Bir fonksiyonel bile\u015fenin i\u00e7indeki bir DOM elementine eri\u015fmek i\u00e7in <code>forwardRef<\/code> ile sarmalay\u0131n ve ref&#8217;i i\u00e7teki elemente iletin.<\/li>\n<li><strong>Gereksiz yere ref kullanmak:<\/strong> Bir state veya prop ile \u00e7\u00f6z\u00fclebilecek bir problemi ref ile \u00e7\u00f6zmeye \u00e7al\u0131\u015fmak, kodu daha karma\u015f\u0131k hale getirir. Her zaman \u00f6nce deklaratif \u00e7\u00f6z\u00fcmleri d\u00fc\u015f\u00fcn\u00fcn.<\/li>\n<li><strong>Refleri normal prop&#8217;lar gibi ge\u00e7irmek:<\/strong> Ref&#8217;ler \u00f6zel bir prop&#8217;tur. Alt bile\u015fene ref iletmek i\u00e7in <code>forwardRef<\/code> kullan\u0131n.<\/li>\n<\/ul>\n<h3>Sonu\u00e7<\/h3>\n<p>Refler, React&#8217;in deklaratif d\u00fcnyas\u0131nda, do\u011frudan DOM elementleriyle veya bile\u015fen \u00f6rnekleriyle etkile\u015fime ge\u00e7memiz gerekti\u011finde ba\u015fvurdu\u011fumuz g\u00fc\u00e7l\u00fc bir &#8220;ka\u00e7\u0131\u015f kap\u0131s\u0131d\u0131r&#8221;. Otomatik odaklanma, medya oynatma kontrol\u00fc, \u00fc\u00e7\u00fcnc\u00fc parti k\u00fct\u00fcphanelerle entegrasyon ve alt bile\u015fenlerin belirli metodlar\u0131na eri\u015fim gibi senaryolarda vazge\u00e7ilmezdirler. <code>React.createRef()<\/code>, <code>useRef()<\/code>, <code>forwardRef<\/code>, <code>useImperativeHandle<\/code> ve callback ref&#8217;leri gibi farkl\u0131 mekanizmalar, bu ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak i\u00e7in React taraf\u0131ndan sunulur.<\/p>\n<p>Ancak, ref&#8217;lerin dikkatli ve \u00f6l\u00e7\u00fcl\u00fc kullan\u0131lmas\u0131 esast\u0131r. React&#8217;in temel felsefesine ayk\u0131r\u0131 olduklar\u0131 i\u00e7in, \u00f6ncelikle state ve props tabanl\u0131 \u00e7\u00f6z\u00fcmler aranmal\u0131, ref&#8217;ler yaln\u0131zca ger\u00e7ekten gerekli oldu\u011funda kullan\u0131lmal\u0131d\u0131r. Do\u011fru kullan\u0131ld\u0131\u011f\u0131nda, ref&#8217;ler React uygulamalar\u0131n\u0131za esneklik ve g\u00fc\u00e7 katarken, yanl\u0131\u015f veya gereksiz kullan\u0131mlar\u0131 kod karma\u015f\u0131kl\u0131\u011f\u0131na ve bak\u0131m zorluklar\u0131na yol a\u00e7abilir. Bu k\u0131lavuz, React&#8217;te ref&#8217;leri ne zaman ve nas\u0131l etkili bir \u015fekilde kullanaca\u011f\u0131n\u0131za dair sa\u011flam bir temel olu\u015fturman\u0131za yard\u0131mc\u0131 olmay\u0131 umuyor.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"React&#8217;te Refler \u0130\u00e7in Bir K\u0131lavuz\nReact, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in deklaratif bir yakla\u015f\u0131m sunar. Bile\u015fenlerin durumu (state","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-37190","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&#039;te Refler \u0130\u00e7in Bir K\u0131lavuz - 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\/reactte-refler-icin-bir-kilavuz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React&#039;te Refler \u0130\u00e7in Bir K\u0131lavuz\" \/>\n<meta property=\"og:description\" content=\"React&#039;te Refler \u0130\u00e7in Bir K\u0131lavuz React, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in deklaratif bir yakla\u015f\u0131m sunar. Bile\u015fenlerin durumu (state\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-28T14:40:46+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=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"React&#8217;te Refler \u0130\u00e7in Bir K\u0131lavuz\",\"datePublished\":\"2025-12-28T14:40:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/\"},\"wordCount\":1977,\"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\/reactte-refler-icin-bir-kilavuz\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/\",\"name\":\"React'te Refler \u0130\u00e7in Bir K\u0131lavuz - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-28T14:40:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React&#8217;te Refler \u0130\u00e7in Bir K\u0131lavuz\"}]},{\"@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'te Refler \u0130\u00e7in Bir K\u0131lavuz - 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\/reactte-refler-icin-bir-kilavuz\/","og_locale":"tr_TR","og_type":"article","og_title":"React'te Refler \u0130\u00e7in Bir K\u0131lavuz","og_description":"React'te Refler \u0130\u00e7in Bir K\u0131lavuz React, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in deklaratif bir yakla\u015f\u0131m sunar. Bile\u015fenlerin durumu (state","og_url":"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-28T14:40:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"React&#8217;te Refler \u0130\u00e7in Bir K\u0131lavuz","datePublished":"2025-12-28T14:40:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/"},"wordCount":1977,"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\/reactte-refler-icin-bir-kilavuz\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/","url":"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/","name":"React'te Refler \u0130\u00e7in Bir K\u0131lavuz - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-28T14:40:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/reactte-refler-icin-bir-kilavuz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"React&#8217;te Refler \u0130\u00e7in Bir K\u0131lavuz"}]},{"@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\/37190","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=37190"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37190\/revisions"}],"predecessor-version":[{"id":37191,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37190\/revisions\/37191"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}