{"id":37681,"date":"2026-01-12T12:00:52","date_gmt":"2026-01-12T09:00:52","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/"},"modified":"2026-01-12T12:00:52","modified_gmt":"2026-01-12T09:00:52","slug":"reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/","title":{"rendered":"ReactJS&#8217;te useImperativeHandle Hook&#8217;u: Ref Y\u00f6netiminde Esneklik ve Kontrol"},"content":{"rendered":"<h2>ReactJS&#8217;te useImperativeHandle Hook&#8217;u: Ref Y\u00f6netiminde Esneklik ve Kontrol<\/h2>\n<p>React, deklaratif bir UI k\u00fct\u00fcphanesidir; yani bile\u015fenlerinizin nas\u0131l g\u00f6r\u00fcnmesi gerekti\u011fini tan\u0131mlars\u0131n\u0131z ve React bu durumu y\u00f6netir. Ancak, bazen DOM elemanlar\u0131na veya alt bile\u015fenlere do\u011frudan eri\u015fim gibi imperatif i\u015flemlere ihtiya\u00e7 duyar\u0131z. \u0130\u015fte bu noktada <code>ref<\/code>&#8216;ler devreye girer. <code>useImperativeHandle<\/code> hook&#8217;u ise, bir alt bile\u015fenin d\u0131\u015far\u0131ya a\u00e7t\u0131\u011f\u0131 ref de\u011ferini \u00f6zelle\u015ftirerek, \u00fcst bile\u015fenin bu alt bile\u015fenle daha kontroll\u00fc ve esnek bir \u015fekilde etkile\u015fim kurmas\u0131n\u0131 sa\u011flar. Bu makalede, <code>useImperativeHandle<\/code>&#8216;\u0131n ne oldu\u011funu, ne zaman ve nas\u0131l kullan\u0131laca\u011f\u0131n\u0131, alternatiflerini ve en iyi uygulamalar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>React&#8217;te Ref Kavram\u0131 ve Kullan\u0131m Alanlar\u0131<\/h3>\n<p>React&#8217;in deklaratif do\u011fas\u0131, \u00e7o\u011fu durumda bile\u015fenler aras\u0131 etkile\u015fimi prop&#8217;lar ve state \u00fczerinden y\u00f6netmemizi te\u015fvik eder. Ancak baz\u0131 senaryolarda, bir DOM eleman\u0131na veya bir React bile\u015feninin \u00f6rne\u011fine do\u011frudan eri\u015fmek ka\u00e7\u0131n\u0131lmaz hale gelir. \u0130\u015fte bu noktada &#8220;ref&#8221;ler devreye girer.<\/p>\n<h4>Refs Nedir?<\/h4>\n<p>Refs (referanslar), React bile\u015fenleri i\u00e7inde do\u011frudan DOM d\u00fc\u011f\u00fcmlerine veya React bile\u015fen \u00f6rneklerine eri\u015fim sa\u011flaman\u0131n bir yoludur. Genellikle, bir bile\u015fenin ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn d\u0131\u015f\u0131ndaki etkile\u015fimler i\u00e7in kullan\u0131l\u0131rlar. \u00d6rne\u011fin, bir input alan\u0131na odaklanmak, medya oynatmay\u0131 kontrol etmek veya bir animasyonu tetiklemek gibi durumlar ref kullan\u0131m\u0131na iyi birer \u00f6rnektir.<\/p>\n<h4>createRef ve useRef<\/h4>\n<p>Fonksiyonel bile\u015fenler yayg\u0131nla\u015fmadan \u00f6nce, s\u0131n\u0131f bile\u015fenlerinde <code>React.createRef()<\/code> kullan\u0131l\u0131yordu. Fonksiyonel bile\u015fenlerin hayat\u0131m\u0131za girmesiyle birlikte, <code>useRef<\/code> hook&#8217;u bu ihtiyac\u0131 kar\u015f\u0131lamak \u00fczere tasarland\u0131. <code>useRef<\/code>, mutable bir obje d\u00f6nd\u00fcr\u00fcr ve <code>.current<\/code> \u00f6zelli\u011fi arac\u0131l\u0131\u011f\u0131yla referans tutulan de\u011fere eri\u015fim sa\u011flar. Bu de\u011fer, bile\u015fen yeniden render edildi\u011finde bile ayn\u0131 kal\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import React, { useRef, useEffect } from 'react';\n\nfunction MyInput() {\n  const inputRef = useRef(null);\n\n  useEffect(() => {\n    \/\/ Bile\u015fen mount edildi\u011finde input'a odaklan\n    if (inputRef.current) {\n      inputRef.current.focus();\n    }\n  }, []);\n\n  return <input type=\"text\" ref={inputRef} \/>;\n}<\/pre>\n<p><\/code><\/p>\n<h4>Ref Forwarding<\/h4>\n<p>Varsay\u0131lan olarak, bir React bile\u015fenine <code>ref<\/code> prop'u ge\u00e7meye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda, bu prop do\u011frudan DOM eleman\u0131na veya bile\u015fenin kendisine iletilmez. Bu davran\u0131\u015f, bile\u015fenlerin i\u00e7 detaylar\u0131n\u0131 gizleme prensibiyle uyumludur. Ancak, bazen bir \u00fcst bile\u015fenin, bir alt bile\u015fenin i\u00e7indeki bir DOM eleman\u0131na veya \u00f6zel bir metoda eri\u015fmesi gerekebilir. \u0130\u015fte bu durumda <code>React.forwardRef<\/code> kullan\u0131l\u0131r. <code>forwardRef<\/code>, bir bile\u015fenin ald\u0131\u011f\u0131 <code>ref<\/code> prop'unu alt bile\u015fenine veya i\u00e7indeki bir DOM eleman\u0131na iletmesini sa\u011flar.<\/p>\n<pre><code class=\"language-jsx\">import React, { forwardRef } from 'react';\n\nconst MyButton = forwardRef((props, ref) => (\n  <button ref={ref} {...props}>\n    {props.children}\n  <\/button>\n));\n\nfunction ParentComponent() {\n  const buttonRef = useRef(null);\n\n  useEffect(() => {\n    if (buttonRef.current) {\n      \/\/ buttonRef.current art\u0131k MyButton i\u00e7indeki ger\u00e7ek <button> eleman\u0131na referans eder\n      console.log(buttonRef.current);\n    }\n  }, []);\n\n  return <MyButton ref={buttonRef}>T\u0131kla<\/MyButton>;\n}<\/pre>\n<p><\/code><\/p>\n<h4>Ref Kullan\u0131m Senaryolar\u0131<\/h4>\n<ul>\n<li><strong>Odak Y\u00f6netimi:<\/strong> Bir input'a otomatik odaklanma.<\/li>\n<li><strong>Medya Kontrol\u00fc:<\/strong> Bir video veya ses oynat\u0131c\u0131s\u0131n\u0131 durdurma, ba\u015flatma.<\/li>\n<li><strong>Animasyonlar:<\/strong> \u00dc\u00e7\u00fcnc\u00fc taraf animasyon k\u00fct\u00fcphaneleriyle do\u011frudan DOM manip\u00fclasyonu.<\/li>\n<li><strong>\u00d6l\u00e7\u00fcmleme:<\/strong> Bir DOM eleman\u0131n\u0131n boyutunu veya konumunu almak.<\/li>\n<\/ul>\n<h3>useImperativeHandle Nedir ve Neden \u0130htiya\u00e7 Duyar\u0131z?<\/h3>\n<p>React'in deklaratif d\u00fcnyas\u0131nda, genellikle bile\u015fenlerin i\u00e7 i\u015fleyi\u015fine do\u011frudan m\u00fcdahale etmekten ka\u00e7\u0131n\u0131r\u0131z. Ancak baz\u0131 durumlarda, bir alt bile\u015fenin belirli fonksiyonlar\u0131n\u0131 veya de\u011ferlerini \u00fcst bile\u015fene \"a\u00e7mak\" isteriz. <code>useImperativeHandle<\/code> tam da bu ihtiyac\u0131 kar\u015f\u0131lamak i\u00e7in tasarlanm\u0131\u015f g\u00fc\u00e7l\u00fc bir hook'tur.<\/p>\n<h4>Deklaratif ve Imperatif Yakla\u015f\u0131m<\/h4>\n<p>React, UI'\u0131 \"nas\u0131l g\u00f6r\u00fcnece\u011fini\" tan\u0131mlayarak olu\u015fturdu\u011fumuz deklaratif bir model benimser. State de\u011fi\u015fti\u011finde, React UI'\u0131 yeniden hesaplar ve g\u00fcnceller. Bu yakla\u015f\u0131m, kodun daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar. Ancak, baz\u0131 \u00f6zel durumlarda (\u00f6rne\u011fin, bir DOM eleman\u0131na odaklanma, bir animasyonu manuel olarak ba\u015flatma), \"nas\u0131l yap\u0131laca\u011f\u0131n\u0131\" do\u011frudan belirtmemiz gereken imperatif bir yakla\u015f\u0131ma ihtiya\u00e7 duyar\u0131z. Ref'ler bu imperatif k\u00f6pr\u00fcy\u00fc kurar.<\/p>\n<h4>Hook'un Tan\u0131m\u0131 ve Amac\u0131<\/h4>\n<p><code>useImperativeHandle<\/code>, <code>forwardRef<\/code> ile birlikte kullan\u0131ld\u0131\u011f\u0131nda anlam kazanan bir hook'tur. Bir fonksiyonel bile\u015fenin d\u0131\u015far\u0131ya a\u00e7t\u0131\u011f\u0131 <code>ref<\/code> objesini \u00f6zelle\u015ftirmemizi sa\u011flar. Yani, \u00fcst bile\u015fen alt bile\u015fene bir ref verdi\u011finde, <code>useImperativeHandle<\/code> sayesinde bu ref objesinin <code>.current<\/code> \u00f6zelli\u011finin neyi temsil edece\u011fini biz belirleyebiliriz. Bu sayede, alt bile\u015fenin i\u00e7indeki t\u00fcm detaylar\u0131 if\u015fa etmek yerine, sadece belirli metotlar\u0131 veya de\u011ferleri d\u0131\u015far\u0131ya a\u00e7arak daha kontroll\u00fc bir aray\u00fcz sunar\u0131z.<\/p>\n<h4>Yayg\u0131n Problemler<\/h4>\n<p><code>useImperativeHandle<\/code> olmadan, bir \u00fcst bile\u015fen bir alt bile\u015fenin i\u00e7indeki bir DOM eleman\u0131na veya \u00f6zel bir metoda eri\u015fmek istedi\u011finde birka\u00e7 sorunla kar\u015f\u0131la\u015fabilir:<\/p>\n<ol>\n<li><strong>T\u00fcm \u0130\u00e7 Detaylar\u0131n A\u00e7\u0131\u011fa \u00c7\u0131kmas\u0131:<\/strong> E\u011fer <code>forwardRef<\/code> ile sadece alt bile\u015fenin ana DOM eleman\u0131n\u0131 iletirsek, \u00fcst bile\u015fen sadece o DOM eleman\u0131na eri\u015febilir. Alt bile\u015fenin i\u00e7indeki di\u011fer elemanlara veya \u00f6zel metotlara eri\u015fim sa\u011flamak zorla\u015f\u0131r.<\/li>\n<li><strong>G\u00fcvenlik ve Kaps\u00fclleme \u0130hlali:<\/strong> Bir alt bile\u015fenin i\u00e7indeki t\u00fcm state veya metotlara do\u011frudan eri\u015fim, bile\u015fenin kaps\u00fclleme prensibini zay\u0131flat\u0131r ve gelecekteki de\u011fi\u015fiklikleri zorla\u015ft\u0131rabilir.<\/li>\n<li><strong>Net Olmayan Aray\u00fcz:<\/strong> \u00dcst bile\u015fen, alt bile\u015fenin ref'i \u00fczerinden hangi metotlara eri\u015febilece\u011fini net olarak bilemez.<\/li>\n<\/ol>\n<p><code>useImperativeHandle<\/code>, bu sorunlar\u0131 \u00e7\u00f6zerek alt bile\u015fenin d\u0131\u015f d\u00fcnyaya sundu\u011fu aray\u00fcz\u00fc net ve kontroll\u00fc bir \u015fekilde tan\u0131mlamam\u0131z\u0131 sa\u011flar.<\/p>\n<h3>useImperativeHandle'\u0131n Temel Kullan\u0131m\u0131<\/h3>\n<p><code>useImperativeHandle<\/code> hook'unun temel kullan\u0131m\u0131 olduk\u00e7a basittir, ancak <code>forwardRef<\/code> ile birlikte \u00e7al\u0131\u015fmas\u0131 gerekti\u011fini unutmamak \u00f6nemlidir.<\/p>\n<h4>S\u00f6z Dizimi (Syntax)<\/h4>\n<p><code>useImperativeHandle<\/code> \u00fc\u00e7 arg\u00fcman al\u0131r:<\/p>\n<pre><code class=\"language-javascript\">useImperativeHandle(ref, createHandle, [deps]);<\/pre>\n<p><\/code><\/p>\n<ol>\n<li><strong><code>ref<\/code> (Gerekli):<\/strong> <code>forwardRef<\/code> taraf\u0131ndan alt bile\u015fene iletilen ref objesidir.<\/li>\n<li><strong><code>createHandle<\/code> (Gerekli):<\/strong> Bu, bir fonksiyon d\u00f6nd\u00fcren bir fonksiyondur. D\u00f6nd\u00fcr\u00fclen fonksiyon, <code>ref.current<\/code> de\u011feri olarak ayarlanacak objeyi i\u00e7erir. Bu obje, \u00fcst bile\u015fenin alt bile\u015fenin ref'i arac\u0131l\u0131\u011f\u0131yla eri\u015febilece\u011fi metotlar\u0131 veya de\u011ferleri tan\u0131mlar.<\/li>\n<li><strong><code>[deps]<\/code> (Opsiyonel):<\/strong> Ba\u011f\u0131ml\u0131l\u0131k dizisidir. <code>createHandle<\/code> fonksiyonu, bu ba\u011f\u0131ml\u0131l\u0131klardan herhangi biri de\u011fi\u015fti\u011finde yeniden \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. <code>useCallback<\/code> veya <code>useMemo<\/code>'daki <code>deps<\/code> dizisine benzer \u015fekilde \u00e7al\u0131\u015f\u0131r. Bo\u015f bir dizi (<code>[]<\/code>) verilirse, <code>createHandle<\/code> yaln\u0131zca bile\u015fen ilk render edildi\u011finde \u00e7al\u0131\u015f\u0131r.<\/li>\n<\/ol>\n<h4>Ad\u0131m Ad\u0131m Uygulama<\/h4>\n<p>Bir <code>Input<\/code> bile\u015feni d\u00fc\u015f\u00fcnelim. Bu bile\u015fenin i\u00e7ine odaklanma (<code>focus<\/code>) ve de\u011feri temizleme (<code>clear<\/code>) gibi iki \u00f6zel metot tan\u0131mlamak istiyoruz ve bu metotlara \u00fcst bile\u015fenden eri\u015fmek istiyoruz.<\/p>\n<ol>\n<li><strong>Alt Bile\u015feni Olu\u015fturma ve <code>forwardRef<\/code> Kullan\u0131m\u0131:<\/strong><br \/>\n        Alt bile\u015fenimizi <code>forwardRef<\/code> ile sarmalayarak, \u00fcst bile\u015fenden gelen <code>ref<\/code> prop'unu almas\u0131n\u0131 sa\u011fl\u0131yoruz.<\/li>\n<li><strong><code>useImperativeHandle<\/code> Kullan\u0131m\u0131:<\/strong><br \/>\n        Alt bile\u015fen i\u00e7inde <code>useImperativeHandle<\/code> kullanarak, <code>ref.current<\/code> objesinin neyi i\u00e7erece\u011fini belirliyoruz.<\/li>\n<li><strong>\u00dcst Bile\u015fende Ref'i Kullanma:<\/strong><br \/>\n        \u00dcst bile\u015fende bir <code>useRef<\/code> olu\u015fturup, bunu alt bile\u015fene iletiyoruz ve sonra alt bile\u015fenin a\u00e7\u0131\u011fa \u00e7\u0131kard\u0131\u011f\u0131 metotlar\u0131 \u00e7a\u011f\u0131r\u0131yoruz.<\/li>\n<\/ol>\n<h4>Kod \u00d6rne\u011fi<\/h4>\n<p>A\u015fa\u011f\u0131daki \u00f6rnek, bir \u00fcst bile\u015fenin (<code>ParentForm<\/code>), bir alt bile\u015fen olan <code>CustomInput<\/code>'\u0131n <code>focus<\/code> ve <code>clear<\/code> metotlar\u0131na nas\u0131l eri\u015fti\u011fini g\u00f6sterir.<\/p>\n<pre><code class=\"language-jsx\">import React, { useRef, forwardRef, useImperativeHandle } from 'react';\n\n\/\/ 1. Alt Bile\u015fen: CustomInput\n\/\/ forwardRef ile ref prop'unu almas\u0131n\u0131 sa\u011fl\u0131yoruz\nconst CustomInput = forwardRef((props, ref) => {\n  const inputEl = useRef(null); \/\/ Ger\u00e7ek input eleman\u0131na referans\n\n  \/\/ useImperativeHandle ile d\u0131\u015far\u0131ya a\u00e7\u0131lacak metotlar\u0131 tan\u0131ml\u0131yoruz\n  useImperativeHandle(ref, () => ({\n    focus: () => {\n      \/\/ D\u0131\u015far\u0131dan \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda input'a odaklan\n      inputEl.current.focus();\n    },\n    clear: () => {\n      \/\/ D\u0131\u015far\u0131dan \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda input'un de\u011ferini temizle\n      inputEl.current.value = '';\n    },\n    \/\/ \u0130stenirse ba\u015fka metotlar veya de\u011ferler de eklenebilir\n    getInputValue: () => inputEl.current.value\n  }), []); \/\/ Ba\u011f\u0131ml\u0131l\u0131k dizisi bo\u015f, bu sayede handle objesi sadece bir kez olu\u015fturulur\n\n  return (\n    <div>\n      <label>{props.label}: <\/label>\n      <input type=\"text\" ref={inputEl} \/>\n    <\/div>\n  );\n});\n\n\/\/ 2. \u00dcst Bile\u015fen: ParentForm\nfunction ParentForm() {\n  const customInputRef = useRef(null); \/\/ CustomInput'a referans\n\n  const handleFocusClick = () => {\n    if (customInputRef.current) {\n      customInputRef.current.focus(); \/\/ Alt bile\u015fenin focus metodunu \u00e7a\u011f\u0131r\n    }\n  };\n\n  const handleClearClick = () => {\n    if (customInputRef.current) {\n      customInputRef.current.clear(); \/\/ Alt bile\u015fenin clear metodunu \u00e7a\u011f\u0131r\n    }\n  };\n\n  const handleGetValueClick = () => {\n    if (customInputRef.current) {\n      alert(<code>Input de\u011feri: ${customInputRef.current.getInputValue()}<\/code>);\n    }\n  };\n\n  return (\n    <div>\n      <h3>Parent Form<\/h3>\n      <CustomInput label=\"Kullan\u0131c\u0131 Ad\u0131\" ref={customInputRef} \/>\n      <br \/>\n      <button onClick={handleFocusClick}>Input'a Odaklan<\/button>\n      <button onClick={handleClearClick}>Input'u Temizle<\/button>\n      <button onClick={handleGetValueClick}>De\u011feri Al<\/button>\n    <\/div>\n  );\n}\n\nexport default ParentForm;<\/pre>\n<p><\/code><br \/>\nBu \u00f6rnekte, <code>ParentForm<\/code> bile\u015feni, <code>CustomInput<\/code> bile\u015feninin i\u00e7indeki ger\u00e7ek <code><input><\/code> eleman\u0131na do\u011frudan eri\u015fmek yerine, <code>CustomInput<\/code>'\u0131n <code>useImperativeHandle<\/code> ile d\u0131\u015far\u0131ya a\u00e7t\u0131\u011f\u0131 <code>focus<\/code>, <code>clear<\/code> ve <code>getInputValue<\/code> metotlar\u0131na eri\u015fir. Bu, alt bile\u015fenin i\u00e7 detaylar\u0131n\u0131 gizlerken, kontroll\u00fc bir aray\u00fcz sunar.<\/p>\n<h3>\u0130leri Seviye Kullan\u0131m Senaryolar\u0131 ve Dikkat Edilmesi Gerekenler<\/h3>\n<p><code>useImperativeHandle<\/code> genellikle basit ref y\u00f6netiminin \u00f6tesine ge\u00e7en, daha karma\u015f\u0131k bile\u015fen etkile\u015fimlerinde parlar. Ancak, do\u011fru kullan\u0131lmad\u0131\u011f\u0131nda potansiyel sorunlara yol a\u00e7abilir.<\/p>\n<h4>Karma\u015f\u0131k Bile\u015fen Etkile\u015fimleri<\/h4>\n<ol>\n<li><strong>Modal, Drawer veya Toast Bile\u015fenleri:<\/strong><br \/>\n        Bu t\u00fcr bile\u015fenler genellikle <code>isOpen<\/code> gibi bir state ile kontrol edilir. Ancak, bazen bir \u00fcst bile\u015fenin bu bile\u015fenleri do\u011frudan a\u00e7ma, kapatma veya bir mesaj g\u00f6sterme gibi metotlar\u0131 \u00e7a\u011f\u0131rmas\u0131 gerekebilir. <code>useImperativeHandle<\/code> ile <code>open()<\/code>, <code>close()<\/code>, <code>showMessage(message)<\/code> gibi metotlar\u0131 d\u0131\u015far\u0131ya a\u00e7arak, bile\u015fenin dahili state'ini do\u011frudan manip\u00fcle etmek yerine, kontroll\u00fc bir aray\u00fcz sunabiliriz.<\/li>\n<li><strong>Form Elemanlar\u0131 ve Validasyon:<\/strong><br \/>\n        Birden fazla input i\u00e7eren karma\u015f\u0131k bir form bile\u015feni d\u00fc\u015f\u00fcn\u00fcn. \u00dcst bile\u015fen, t\u00fcm formun ge\u00e7erli olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek veya t\u00fcm input'lar\u0131 s\u0131f\u0131rlamak isteyebilir. <code>useImperativeHandle<\/code> ile <code>validateForm()<\/code>, <code>resetForm()<\/code> gibi metotlar\u0131 a\u00e7arak, her bir input'un kendi validasyon mant\u0131\u011f\u0131n\u0131 kaps\u00fclleyebilir ve \u00fcst bile\u015fene sadece genel form durumunu kontrol etme yetene\u011fi verebiliriz.<\/li>\n<li><strong>\u00dc\u00e7\u00fcnc\u00fc Taraf K\u00fct\u00fcphane Entegrasyonlar\u0131:<\/strong><br \/>\n        Baz\u0131 JavaScript k\u00fct\u00fcphaneleri (\u00f6rne\u011fin, harita k\u00fct\u00fcphaneleri, grafik k\u00fct\u00fcphaneleri) do\u011frudan DOM elemanlar\u0131na veya kendi API'lerine imperatif eri\u015fim gerektirir. Bir React sarmalay\u0131c\u0131 bile\u015feni olu\u015ftururken, bu k\u00fct\u00fcphanelerin belirli metotlar\u0131n\u0131 <code>useImperativeHandle<\/code> arac\u0131l\u0131\u011f\u0131yla d\u0131\u015far\u0131ya a\u00e7abiliriz.<\/li>\n<\/ol>\n<h4>Type G\u00fcvenli\u011fi (TypeScript ile)<\/h4>\n<p><code>useImperativeHandle<\/code> kullan\u0131rken TypeScript ile tip g\u00fcvenli\u011fi sa\u011flamak, kodunuzu daha sa\u011flam hale getirir. <code>forwardRef<\/code> ve <code>useImperativeHandle<\/code> i\u00e7in do\u011fru tipleri tan\u0131mlamak, geli\u015ftirme s\u0131ras\u0131nda hatalar\u0131 yakalaman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-typescript\">import React, { useRef, forwardRef, useImperativeHandle } from 'react';\n\n\/\/ 1. D\u0131\u015far\u0131ya a\u00e7\u0131lacak handle objesinin tipi\ninterface CustomInputHandle {\n  focus: () => void;\n  clear: () => void;\n  getInputValue: () => string;\n}\n\n\/\/ 2. CustomInput bile\u015feninin prop'lar\u0131n\u0131n tipi\ninterface CustomInputProps {\n  label: string;\n}\n\n\/\/ 3. forwardRef ve useImperativeHandle i\u00e7in tipleri tan\u0131mla\nconst CustomInput = forwardRef<CustomInputHandle, CustomInputProps>(({ label }, ref) => {\n  const inputEl = useRef<HTMLInputElement>(null);\n\n  useImperativeHandle(ref, () => ({\n    focus: () => {\n      inputEl.current?.focus();\n    },\n    clear: () => {\n      if (inputEl.current) {\n        inputEl.current.value = '';\n      }\n    },\n    getInputValue: () => inputEl.current?.value || ''\n  }), []);\n\n  return (\n    <div>\n      <label>{label}: <\/label>\n      <input type=\"text\" ref={inputEl} \/>\n    <\/div>\n  );\n});\n\nfunction ParentForm() {\n  \/\/ 4. useRef i\u00e7in CustomInputHandle tipini kullan\n  const customInputRef = useRef<CustomInputHandle>(null);\n\n  \/\/ ... (Metot \u00e7a\u011fr\u0131lar\u0131 \u00f6nceki \u00f6rnekteki gibi)\n\n  return (\n    <div>\n      <h3>Parent Form (TypeScript)<\/h3>\n      <CustomInput label=\"Kullan\u0131c\u0131 Ad\u0131\" ref={customInputRef} \/>\n      <button onClick={() => customInputRef.current?.focus()}>Odaklan<\/button>\n      <button onClick={() => customInputRef.current?.clear()}>Temizle<\/button>\n      <button onClick={() => alert(customInputRef.current?.getInputValue())}>De\u011feri Al<\/button>\n    <\/div>\n  );\n}<\/pre>\n<p><\/code><br \/>\nBu sayede, <code>customInputRef.current<\/code> \u00fczerinden eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z metotlar ve \u00f6zellikler i\u00e7in otomatik tamamlama ve tip kontrol\u00fc al\u0131rs\u0131n\u0131z.<\/p>\n<h4>Performans Etkileri<\/h4>\n<p><code>useImperativeHandle<\/code>'\u0131n kendisi do\u011frudan b\u00fcy\u00fck bir performans sorununa yol a\u00e7maz. Ancak, <code>createHandle<\/code> fonksiyonunun ba\u011f\u0131ml\u0131l\u0131k dizisi (<code>deps<\/code>) do\u011fru y\u00f6netilmezse, gereksiz yere yeni bir handle objesi olu\u015fturulmas\u0131na neden olabilir. Bu durum genellikle k\u00fc\u00e7\u00fck bir etkiye sahiptir, ancak \u00e7ok s\u0131k render olan veya \u00e7ok say\u0131da <code>useImperativeHandle<\/code> kullanan bile\u015fenlerde dikkatli olmak gerekebilir. Genellikle bo\u015f bir ba\u011f\u0131ml\u0131l\u0131k dizisi (<code>[]<\/code>) kullanmak yeterlidir, \u00e7\u00fcnk\u00fc handle objesinin referans\u0131n\u0131n de\u011fi\u015fmesi nadiren istenir.<\/p>\n<h4>K\u00f6t\u00fcye Kullan\u0131m ve Alternatifler<\/h4>\n<p><code>useImperativeHandle<\/code> g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r, ancak React'in deklaratif do\u011fas\u0131na ayk\u0131r\u0131 oldu\u011fu i\u00e7in dikkatli kullan\u0131lmal\u0131d\u0131r.<\/p>\n<ul>\n<li><strong>State Y\u00f6netimi Yerine Kullanmaktan Ka\u00e7\u0131n\u0131n:<\/strong> \u00c7o\u011fu zaman, bir alt bile\u015fenin durumunu \u00fcst bile\u015fene prop'lar arac\u0131l\u0131\u011f\u0131yla iletmek veya bir state y\u00f6netim k\u00fct\u00fcphanesi kullanmak daha iyi bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/li>\n<li><strong>Kaps\u00fcllemeyi Bozmaktan Ka\u00e7\u0131n\u0131n:<\/strong> <code>useImperativeHandle<\/code> ile alt bile\u015fenin \u00e7ok fazla i\u00e7 detay\u0131n\u0131 d\u0131\u015far\u0131ya a\u00e7mak, bile\u015fenin kaps\u00fcllemesini zay\u0131flat\u0131r ve bak\u0131m\u0131n\u0131 zorla\u015ft\u0131r\u0131r. Yaln\u0131zca ger\u00e7ekten gerekli olan minimal bir aray\u00fcz sunmaya \u00e7al\u0131\u015f\u0131n.<\/li>\n<li><strong>Alternatifleri De\u011ferlendirin:<\/strong> Her zaman \u00f6nce prop'lar, callback'ler, Context API veya bir state y\u00f6netim k\u00fct\u00fcphanesi gibi deklaratif \u00e7\u00f6z\u00fcmleri d\u00fc\u015f\u00fcn\u00fcn. <code>useImperativeHandle<\/code> yaln\u0131zca bu \u00e7\u00f6z\u00fcmler yetersiz kald\u0131\u011f\u0131nda veya imperatif bir aray\u00fcze ger\u00e7ekten ihtiya\u00e7 duyuldu\u011funda tercih edilmelidir.<\/li>\n<\/ul>\n<p>\u00d6zetle, <code>useImperativeHandle<\/code> bir \"ka\u00e7\u0131\u015f kapa\u011f\u0131\"d\u0131r. React'in felsefesine ayk\u0131r\u0131 oldu\u011fu i\u00e7in, ne zaman ve nas\u0131l kullan\u0131laca\u011f\u0131 konusunda dikkatli bir de\u011ferlendirme yapmak \u00f6nemlidir.<\/p>\n<h3>useImperativeHandle Alternatifleri ve Ne Zaman Kullanmal\u0131?<\/h3>\n<p><code>useImperativeHandle<\/code> g\u00fc\u00e7l\u00fc bir ara\u00e7 olsa da, \u00e7o\u011fu durumda React'in deklaratif yap\u0131s\u0131na daha uygun alternatifler mevcuttur. Bu alternatifleri ve <code>useImperativeHandle<\/code>'\u0131 ne zaman tercih etmeniz gerekti\u011fini anlamak, daha temiz ve y\u00f6netilebilir kod yazman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h4>Prop Drilling (Props ile Veri ve Fonksiyon \u0130letimi)<\/h4>\n<ul>\n<li><strong>A\u00e7\u0131klama:<\/strong> En temel React ileti\u015fim mekanizmas\u0131d\u0131r. \u00dcst bile\u015fen, alt bile\u015fene veri veya fonksiyonlar\u0131 prop olarak iletir. Alt bile\u015fen de bu prop'lar\u0131 kullanarak \u00fcst bile\u015fenle etkile\u015fime girer.<\/li>\n<li><strong>Avantajlar\u0131:<\/strong> Anla\u015f\u0131lmas\u0131 kolay, \u015feffaf, React felsefesine uygun.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> \u00c7ok katmanl\u0131 bile\u015fen hiyerar\u015filerinde, verilerin veya fonksiyonlar\u0131n gereksiz yere bir\u00e7ok ara bile\u015fenden ge\u00e7irilmesi gerekebilir (\"prop drilling\").<\/li>\n<li><strong>Ne Zaman Kullanmal\u0131:<\/strong> \u00c7o\u011fu durumda, bile\u015fenler aras\u0131 ileti\u015fim i\u00e7in ilk tercihiniz olmal\u0131d\u0131r. \u00d6zellikle do\u011frudan \u00fcst-alt ili\u015fkisi olan ve derin olmayan hiyerar\u015filerde idealdir.<\/li>\n<\/ul>\n<h4>Context API<\/h4>\n<ul>\n<li><strong>A\u00e7\u0131klama:<\/strong> Prop drilling sorununu \u00e7\u00f6zmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bir context olu\u015fturarak, bile\u015fen a\u011fac\u0131n\u0131n herhangi bir seviyesindeki bile\u015fenlerin, do\u011frudan prop ge\u00e7i\u015fine gerek kalmadan verilere veya fonksiyonlara eri\u015fmesini sa\u011flar.<\/li>\n<li><strong>Avantajlar\u0131:<\/strong> Prop drilling'i azalt\u0131r, global veya yar\u0131-global state y\u00f6netimi i\u00e7in uygundur.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> A\u015f\u0131r\u0131 kullan\u0131m\u0131, veri ak\u0131\u015f\u0131n\u0131 takip etmeyi zorla\u015ft\u0131rabilir ve performans sorunlar\u0131na yol a\u00e7abilir (context de\u011fi\u015fti\u011finde onu t\u00fcketen t\u00fcm bile\u015fenler yeniden render olur).<\/li>\n<li><strong>Ne Zaman Kullanmal\u0131:<\/strong> Uygulaman\u0131n bir\u00e7ok yerinde ihtiya\u00e7 duyulan temalar, dil ayarlar\u0131, kullan\u0131c\u0131 kimlik do\u011frulama bilgileri gibi veriler i\u00e7in uygundur.<\/li>\n<\/ul>\n<h4>State Y\u00f6netim K\u00fct\u00fcphaneleri (Redux, Zustand, Recoil vb.)<\/h4>\n<ul>\n<li><strong>A\u00e7\u0131klama:<\/strong> Daha karma\u015f\u0131k uygulamalarda, uygulaman\u0131n state'ini merkezi bir yerde y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. Bu k\u00fct\u00fcphaneler, state'in nas\u0131l g\u00fcncellenece\u011fi ve bile\u015fenlere nas\u0131l da\u011f\u0131t\u0131laca\u011f\u0131 konusunda daha yap\u0131land\u0131r\u0131lm\u0131\u015f bir yakla\u015f\u0131m sunar.<\/li>\n<li><strong>Avantajlar\u0131:<\/strong> B\u00fcy\u00fck ve karma\u015f\u0131k uygulamalarda state y\u00f6netimini basitle\u015ftirir, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r, g\u00fc\u00e7l\u00fc geli\u015ftirici ara\u00e7lar\u0131 sunar.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> Ek ba\u011f\u0131ml\u0131l\u0131k ve \u00f6\u011frenme e\u011frisi, k\u00fc\u00e7\u00fck uygulamalar i\u00e7in gereksiz karma\u015f\u0131kl\u0131k.<\/li>\n<li><strong>Ne Zaman Kullanmal\u0131:<\/strong> B\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalarda, state'in birden fazla bile\u015fen taraf\u0131ndan payla\u015f\u0131lmas\u0131 ve karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131n\u0131n oldu\u011fu durumlarda.<\/li>\n<\/ul>\n<h4>Ne Zaman useImperativeHandle Tercih Edilmeli?<\/h4>\n<p><code>useImperativeHandle<\/code>'\u0131 kullanmay\u0131 d\u00fc\u015f\u00fcnmeniz gereken senaryolar olduk\u00e7a spesifiktir ve genellikle yukar\u0131daki alternatiflerin yetersiz kald\u0131\u011f\u0131 durumlar\u0131 kapsar:<\/p>\n<ol>\n<li><strong>Imperatif DOM \u0130\u015flemleri:<\/strong> Bir alt bile\u015fenin i\u00e7indeki bir DOM eleman\u0131na odaklanma, medya oynatmay\u0131 kontrol etme, bir animasyonu tetikleme gibi do\u011frudan DOM manip\u00fclasyonu gerektiren durumlar.<\/li>\n<li><strong>\u00dc\u00e7\u00fcnc\u00fc Taraf K\u00fct\u00fcphane Entegrasyonlar\u0131:<\/strong> React d\u0131\u015f\u0131 k\u00fct\u00fcphanelerle etkile\u015fime girerken, bu k\u00fct\u00fcphanelerin API'lerine imperatif eri\u015fim sa\u011flamak i\u00e7in bir sarmalay\u0131c\u0131 bile\u015fen olu\u015fturdu\u011funuzda.<\/li>\n<li><strong>Kontroll\u00fc Bile\u015fen Aray\u00fcz\u00fc:<\/strong> Bir alt bile\u015fenin i\u00e7 detaylar\u0131n\u0131 if\u015fa etmeden, \u00fcst bile\u015fene sadece belirli metotlar\u0131 veya \u00f6zellikleri sunmak istedi\u011finizde. \u00d6rne\u011fin, bir modal bile\u015feninin <code>open()<\/code> veya <code>close()<\/code> metodunu d\u0131\u015far\u0131ya a\u00e7mak, ancak modal\u0131n i\u00e7 state'ini gizlemek.<\/li>\n<li><strong>Performans Optimizasyonu:<\/strong> Bazen, prop'lar arac\u0131l\u0131\u011f\u0131yla \u00e7ok s\u0131k de\u011fi\u015fen callback'ler ge\u00e7irmek yerine, <code>useImperativeHandle<\/code> ile sabit bir ref objesi \u00fczerinden metotlar\u0131 \u00e7a\u011f\u0131rmak daha performansl\u0131 olabilir (ancak bu nadir bir durumdur ve genellikle <code>useCallback<\/code> yeterlidir).<\/li>\n<\/ol>\n<p><strong>\u00d6zetle:<\/strong> <code>useImperativeHandle<\/code>, React'in deklaratif ak\u0131\u015f\u0131ndan \u00e7\u0131k\u0131p imperatif bir eylem ger\u00e7ekle\u015ftirmek i\u00e7in bir \"ka\u00e7\u0131\u015f kapa\u011f\u0131\"d\u0131r. \u00c7o\u011fu zaman alternatifler daha iyi bir se\u00e7imdir. Yaln\u0131zca ger\u00e7ekten bir bile\u015fenin i\u00e7indeki bir \u015feye do\u011frudan m\u00fcdahale etmeniz gerekti\u011finde ve bu m\u00fcdahalenin kaps\u00fcllenmi\u015f, iyi tan\u0131mlanm\u0131\u015f bir aray\u00fcz \u00fczerinden olmas\u0131 gerekti\u011finde <code>useImperativeHandle<\/code>'\u0131 d\u00fc\u015f\u00fcnmelisiniz.<\/p>\n<h3>Performans ve Optimizasyon \u0130pu\u00e7lar\u0131<\/h3>\n<p><code>useImperativeHandle<\/code>'\u0131n kendisi genellikle performans darbo\u011fazlar\u0131na yol a\u00e7maz, ancak yanl\u0131\u015f kullan\u0131m\u0131 veya ba\u011f\u0131ml\u0131l\u0131klar\u0131n g\u00f6z ard\u0131 edilmesi, gereksiz yeniden render'lara veya objelerin yeniden olu\u015fturulmas\u0131na neden olabilir. \u0130\u015fte performans ve optimizasyon i\u00e7in dikkat etmeniz gerekenler:<\/p>\n<h4>Ba\u011f\u0131ml\u0131l\u0131k Dizisi (Dependencies Array)<\/h4>\n<p><code>useImperativeHandle<\/code> hook'u, <code>useCallback<\/code> ve <code>useMemo<\/code> gibi, bir ba\u011f\u0131ml\u0131l\u0131k dizisi (<code>deps<\/code>) al\u0131r. Bu dizi, <code>createHandle<\/code> fonksiyonunun ne zaman yeniden \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 kontrol eder.<\/p>\n<ul>\n<li><strong>Bo\u015f Ba\u011f\u0131ml\u0131l\u0131k Dizisi (<code>[]<\/code>):<\/strong> En yayg\u0131n kullan\u0131m \u015feklidir. E\u011fer <code>createHandle<\/code> fonksiyonu i\u00e7inde d\u0131\u015far\u0131dan gelen hi\u00e7bir prop veya state'e ba\u011f\u0131ml\u0131 de\u011filseniz (yani, handle objesi her zaman ayn\u0131 metotlar\u0131 ve de\u011ferleri sunacaksa), bo\u015f bir dizi kullan\u0131n. Bu, handle objesinin yaln\u0131zca bile\u015fen mount edildi\u011finde bir kez olu\u015fturulmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Dahil Etme:<\/strong> E\u011fer <code>createHandle<\/code> fonksiyonunun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc objedeki metotlar, bile\u015fenin prop'lar\u0131na veya state'ine ba\u011f\u0131ml\u0131ysa, bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 <code>deps<\/code> dizisine eklemelisiniz. Aksi takdirde, metotlar eski prop\/state de\u011ferlerini kapatabilir (closure). Ancak, bu durumda <code>createHandle<\/code> fonksiyonu, ba\u011f\u0131ml\u0131l\u0131klar de\u011fi\u015fti\u011finde yeniden \u00e7al\u0131\u015facak ve <code>ref.current<\/code> objesi g\u00fcncellenecektir. Bu, \u00fcst bile\u015fenin <code>ref.current<\/code> objesinin referans\u0131n\u0131n de\u011fi\u015fmesine neden olabilir.<\/li>\n<\/ul>\n<p><strong>\u00d6nemli Not:<\/strong> <code>useImperativeHandle<\/code>'\u0131n ba\u011f\u0131ml\u0131l\u0131k dizisini gereksiz yere kullanmak veya yanl\u0131\u015f y\u00f6netmek, <code>ref.current<\/code> objesinin referans\u0131n\u0131n s\u0131k s\u0131k de\u011fi\u015fmesine yol a\u00e7abilir. Bu durum, \u00fcst bile\u015fenlerde <code>useEffect<\/code> veya <code>useLayoutEffect<\/code> i\u00e7inde <code>ref.current<\/code> objesine ba\u011f\u0131ml\u0131l\u0131k varsa, gereksiz efekt tetiklenmelerine neden olabilir. \u00c7o\u011fu durumda, handle objesinin referans\u0131n\u0131n de\u011fi\u015fmesi istenmez, bu y\u00fczden bo\u015f bir ba\u011f\u0131ml\u0131l\u0131k dizisi tercih edilir.<\/p>\n<h4>Gereksiz Kullan\u0131mdan Ka\u00e7\u0131nma<\/h4>\n<p><code>useImperativeHandle<\/code> bir \"ka\u00e7\u0131\u015f kapa\u011f\u0131\" oldu\u011fu i\u00e7in, sadece ger\u00e7ekten ihtiya\u00e7 duyuldu\u011funda kullan\u0131lmal\u0131d\u0131r.<\/p>\n<ul>\n<li><strong>Deklaratif \u00c7\u00f6z\u00fcmleri Tercih Edin:<\/strong> Bir alt bile\u015fenin davran\u0131\u015f\u0131n\u0131 prop'lar veya callback'ler arac\u0131l\u0131\u011f\u0131yla y\u00f6netebiliyorsan\u0131z, <code>useImperativeHandle<\/code> kullanmaktan ka\u00e7\u0131n\u0131n. \u00d6rne\u011fin, bir modal\u0131n a\u00e7\u0131l\u0131p kapanmas\u0131n\u0131 <code>isOpen<\/code> prop'u ve <code>onClose<\/code> callback'i ile y\u00f6netmek, <code>open()<\/code> ve <code>close()<\/code> metotlar\u0131n\u0131 ref \u00fczerinden \u00e7a\u011f\u0131rmaktan genellikle daha deklaratif ve React felsefesine uygundur.<\/li>\n<li><strong>Minimal Aray\u00fcz Sunun:<\/strong> E\u011fer <code>useImperativeHandle<\/code> kullanman\u0131z gerekiyorsa, d\u0131\u015far\u0131ya a\u00e7t\u0131\u011f\u0131n\u0131z metot ve de\u011ferleri minimumda tutun. Alt bile\u015fenin i\u00e7 detaylar\u0131n\u0131 gereksiz yere if\u015fa etmekten ka\u00e7\u0131n\u0131n.<\/li>\n<\/ul>\n<h4>Memoizasyon ile Birlikte Kullan\u0131m<\/h4>\n<p>E\u011fer <code>useImperativeHandle<\/code>'\u0131n ba\u011f\u0131ml\u0131l\u0131k dizisinde bir fonksiyon veya obje varsa ve bu fonksiyon\/obje her render'da yeniden olu\u015fturuluyorsa, bu durum <code>createHandle<\/code>'\u0131n gereksiz yere yeniden \u00e7al\u0131\u015fmas\u0131na neden olabilir. Bu durumu \u00f6nlemek i\u00e7in <code>useCallback<\/code> veya <code>useMemo<\/code> kullanabilirsiniz:<\/p>\n<pre><code class=\"language-jsx\">import React, { useRef, forwardRef, useImperativeHandle, useCallback } from 'react';\n\nconst CustomInput = forwardRef((props, ref) => {\n  const inputEl = useRef(null);\n\n  \/\/ E\u011fer focus metodu props'lara veya state'e ba\u011f\u0131ml\u0131 olsayd\u0131 ve\n  \/\/ bu ba\u011f\u0131ml\u0131l\u0131klar s\u0131k de\u011fi\u015fiyorsa, useCallback kullanmak mant\u0131kl\u0131 olabilirdi.\n  \/\/ Ancak bu \u00f6rnekte focus metodu i\u00e7 state'e ba\u011fl\u0131 oldu\u011fu i\u00e7in\n  \/\/ do\u011frudan useImperativeHandle i\u00e7inde tan\u0131mlamak yeterli.\n  const memoizedFocus = useCallback(() => {\n    inputEl.current.focus();\n  }, []); \/\/ inputEl referans\u0131 de\u011fi\u015fmedi\u011fi s\u00fcrece bu fonksiyon ayn\u0131 kal\u0131r.\n\n  useImperativeHandle(ref, () => ({\n    focus: memoizedFocus, \/\/ Memoize edilmi\u015f fonksiyonu kullan\n    clear: () => {\n      inputEl.current.value = '';\n    },\n  }), [memoizedFocus]); \/\/ memoizedFocus ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 eklendi\n\n  return (\n    <div>\n      <input type=\"text\" ref={inputEl} \/>\n    <\/div>\n  );\n});<\/pre>\n<p><\/code><br \/>\nYukar\u0131daki \u00f6rnekte <code>memoizedFocus<\/code> fonksiyonu, <code>inputEl<\/code> referans\u0131 de\u011fi\u015fmedi\u011fi s\u00fcrece ayn\u0131 referansa sahip kal\u0131r. Bu sayede <code>useImperativeHandle<\/code>'\u0131n <code>deps<\/code> dizisine <code>memoizedFocus<\/code> eklendi\u011finde bile, <code>memoizedFocus<\/code>'un referans\u0131 de\u011fi\u015fmedi\u011fi i\u00e7in <code>createHandle<\/code> fonksiyonu gereksiz yere yeniden \u00e7al\u0131\u015fmaz. Ancak \u00e7o\u011fu basit senaryoda, <code>createHandle<\/code> i\u00e7inde do\u011frudan fonksiyonlar\u0131 tan\u0131mlamak ve bo\u015f bir <code>deps<\/code> dizisi kullanmak yeterlidir.<\/p>\n<p>\u00d6zetle, <code>useImperativeHandle<\/code>'\u0131 kullan\u0131rken bilin\u00e7li olmak ve performans etkilerini g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir. Genellikle, <code>deps<\/code> dizisini bo\u015f b\u0131rakmak ve sadece ger\u00e7ekten imperatif bir aray\u00fcze ihtiya\u00e7 duyuldu\u011funda kullanmak en iyi yakla\u015f\u0131md\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>React'in deklaratif do\u011fas\u0131, \u00e7o\u011fu UI geli\u015ftirme senaryosunda harikalar yarat\u0131r. Ancak, bazen DOM elemanlar\u0131na veya alt bile\u015fenlere do\u011frudan m\u00fcdahale etmemiz gereken imperatif ihtiya\u00e7lar ortaya \u00e7\u0131kar. \u0130\u015fte bu noktada <code>ref<\/code>'ler ve \u00f6zellikle <code>useImperativeHandle<\/code> hook'u devreye girer. <code>useImperativeHandle<\/code>, <code>forwardRef<\/code> ile birlikte kullan\u0131ld\u0131\u011f\u0131nda, bir alt bile\u015fenin d\u0131\u015far\u0131ya a\u00e7t\u0131\u011f\u0131 ref objesini \u00f6zelle\u015ftirerek, \u00fcst bile\u015fenin alt bile\u015fenle daha kontroll\u00fc ve esnek bir \u015fekilde etkile\u015fim kurmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bu makalede, <code>useImperativeHandle<\/code>'\u0131n ne oldu\u011funu, temel s\u00f6z dizimini ve ad\u0131m ad\u0131m kullan\u0131m\u0131n\u0131 kod \u00f6rnekleriyle birlikte inceledik. Ayr\u0131ca, modal veya form gibi karma\u015f\u0131k bile\u015fen etkile\u015fimlerinde nas\u0131l kullan\u0131labilece\u011fini, TypeScript ile tip g\u00fcvenli\u011finin nas\u0131l sa\u011flanaca\u011f\u0131n\u0131 ve performans ipu\u00e7lar\u0131n\u0131 ele ald\u0131k. En \u00f6nemlisi, `useImper<\/p>\n","protected":false},"excerpt":{"rendered":"ReactJS&#8217;te useImperativeHandle Hook&#8217;u: Ref Y\u00f6netiminde Esneklik ve Kontrol\nReact, deklaratif bir UI k\u00fct\u00fcphanesidir; yani bile\u015fenlerinizin nas\u0131l g\u00f6r\u00fcn&#8230;","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-37681","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>ReactJS&#039;te useImperativeHandle Hook&#039;u: Ref Y\u00f6netiminde Esneklik ve Kontrol - 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\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ReactJS&#039;te useImperativeHandle Hook&#039;u: Ref Y\u00f6netiminde Esneklik ve Kontrol\" \/>\n<meta property=\"og:description\" content=\"ReactJS&#039;te useImperativeHandle Hook&#039;u: Ref Y\u00f6netiminde Esneklik ve Kontrol React, deklaratif bir UI k\u00fct\u00fcphanesidir; yani bile\u015fenlerinizin nas\u0131l g\u00f6r\u00fcn...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-12T09:00:52+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=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"ReactJS&#8217;te useImperativeHandle Hook&#8217;u: Ref Y\u00f6netiminde Esneklik ve Kontrol\",\"datePublished\":\"2026-01-12T09:00:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/\"},\"wordCount\":3029,\"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\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/\",\"name\":\"ReactJS'te useImperativeHandle Hook'u: Ref Y\u00f6netiminde Esneklik ve Kontrol - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-12T09:00:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ReactJS&#8217;te useImperativeHandle Hook&#8217;u: Ref Y\u00f6netiminde Esneklik ve Kontrol\"}]},{\"@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":"ReactJS'te useImperativeHandle Hook'u: Ref Y\u00f6netiminde Esneklik ve Kontrol - 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\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/","og_locale":"tr_TR","og_type":"article","og_title":"ReactJS'te useImperativeHandle Hook'u: Ref Y\u00f6netiminde Esneklik ve Kontrol","og_description":"ReactJS'te useImperativeHandle Hook'u: Ref Y\u00f6netiminde Esneklik ve Kontrol React, deklaratif bir UI k\u00fct\u00fcphanesidir; yani bile\u015fenlerinizin nas\u0131l g\u00f6r\u00fcn...","og_url":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-12T09:00:52+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"ReactJS&#8217;te useImperativeHandle Hook&#8217;u: Ref Y\u00f6netiminde Esneklik ve Kontrol","datePublished":"2026-01-12T09:00:52+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/"},"wordCount":3029,"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\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/","url":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/","name":"ReactJS'te useImperativeHandle Hook'u: Ref Y\u00f6netiminde Esneklik ve Kontrol - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-12T09:00:52+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/reactjste-useimperativehandle-hooku-ref-yonetiminde-esneklik-ve-kontrol\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ReactJS&#8217;te useImperativeHandle Hook&#8217;u: Ref Y\u00f6netiminde Esneklik ve Kontrol"}]},{"@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\/37681","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=37681"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37681\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}