{"id":38400,"date":"2026-01-30T14:40:59","date_gmt":"2026-01-30T11:40:59","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38400"},"modified":"2026-01-30T14:40:59","modified_gmt":"2026-01-30T11:40:59","slug":"reactte-hata-sinirlari-error-boundaries-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/","title":{"rendered":"React&#8217;te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<h2>React&#8217;te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r?<\/h2>\n<p>React uygulamalar\u0131, kullan\u0131c\u0131 aray\u00fczlerinin dinamik ve etkile\u015fimli yap\u0131s\u0131 sayesinde modern web geli\u015ftirmede vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir. Ancak, her yaz\u0131l\u0131mda oldu\u011fu gibi, React uygulamalar\u0131nda da hatalar ka\u00e7\u0131n\u0131lmazd\u0131r. Beklenmedik durumlar, API sorunlar\u0131, yanl\u0131\u015f veri giri\u015fleri veya geli\u015ftirici hatalar\u0131, uygulaman\u0131n \u00e7\u00f6kmesine veya kullan\u0131c\u0131n\u0131n k\u00f6t\u00fc bir deneyim ya\u015famas\u0131na neden olabilir. \u0130\u015fte tam da bu noktada React&#8217;in &#8220;Hata S\u0131n\u0131rlar\u0131&#8221; (Error Boundaries) devreye girer. React 16 ile tan\u0131t\u0131lan bu g\u00fc\u00e7l\u00fc \u00f6zellik, uygulaman\u0131zdaki JavaScript hatalar\u0131n\u0131 zarif bir \u015fekilde yakalaman\u0131za, kaydetmenize ve kullan\u0131c\u0131ya yedek bir UI (yedek kullan\u0131c\u0131 aray\u00fcz\u00fc) sunarak uygulaman\u0131z\u0131n tamamen \u00e7\u00f6kmesini engellemenize olanak tan\u0131r.<\/p>\n<p>Bu makalede, React&#8217;teki hata s\u0131n\u0131rlar\u0131n\u0131n ne oldu\u011funu, geleneksel hata y\u00f6netimi yakla\u015f\u0131mlar\u0131ndan fark\u0131n\u0131, nas\u0131l olu\u015fturulup kullan\u0131laca\u011f\u0131n\u0131, en iyi uygulamalar\u0131n\u0131 ve dikkat edilmesi gereken noktalar\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Amac\u0131m\u0131z, uygulaman\u0131z\u0131n kararl\u0131l\u0131\u011f\u0131n\u0131 art\u0131rmak ve kullan\u0131c\u0131 deneyimini iyile\u015ftirmek i\u00e7in hata s\u0131n\u0131rlar\u0131n\u0131 etkin bir \u015fekilde kullanman\u0131z\u0131 sa\u011flamakt\u0131r.<\/p>\n<h3>Geleneksel Hata Y\u00f6netimi Yakla\u015f\u0131mlar\u0131 ve S\u0131n\u0131rl\u0131l\u0131klar\u0131<\/h3>\n<p>Yaz\u0131l\u0131m geli\u015ftirmede hatalar\u0131 y\u00f6netmek i\u00e7in yayg\u0131n olarak kullan\u0131lan bir mekanizma <code>try...catch<\/code> blo\u011fudur. JavaScript&#8217;te, bir kod blo\u011fu i\u00e7inde olu\u015fabilecek hatalar\u0131 yakalamak ve i\u015flemek i\u00e7in bu yap\u0131y\u0131 kullan\u0131r\u0131z:<\/p>\n<pre><code class=\"language-javascript\">try {\n  \/\/ Hata potansiyeli olan kod\n  let result = someFunctionThatMightFail();\n  console.log(result);\n} catch (error) {\n  \/\/ Hata olu\u015ftu\u011funda \u00e7al\u0131\u015facak kod\n  console.error(\"Bir hata olu\u015ftu:\", error);\n} finally {\n  \/\/ try veya catch bloklar\u0131 \u00e7al\u0131\u015fsa da \u00e7al\u0131\u015fmasa da her zaman \u00e7al\u0131\u015facak kod\n  console.log(\"\u0130\u015flem tamamland\u0131.\");\n}<\/code><\/pre>\n<p>Bu yap\u0131, senkron JavaScript kodunda, \u00f6zellikle event handler&#8217;lar (olay i\u015fleyicileri), asenkron kodun <code>then<\/code>\/<code>catch<\/code> bloklar\u0131 veya do\u011frudan fonksiyon \u00e7a\u011fr\u0131lar\u0131 gibi yerlerde olduk\u00e7a etkilidir. \u00d6rne\u011fin, bir butona t\u0131klama olay\u0131nda bir API \u00e7a\u011fr\u0131s\u0131 yaparken olu\u015fabilecek a\u011f hatalar\u0131n\u0131 veya veri i\u015fleme hatalar\u0131n\u0131 <code>try...catch<\/code> ile y\u00f6netebiliriz:<\/p>\n<pre><code class=\"language-javascript\">function handleClick() {\n  try {\n    \/\/ API \u00e7a\u011fr\u0131s\u0131 veya ba\u015fka bir i\u015flem\n    fetch('\/api\/data')\n      .then(response => response.json())\n      .then(data => console.log(data))\n      .catch(apiError => console.error(\"API hatas\u0131:\", apiError));\n  } catch (syncError) {\n    console.error(\"Senkron hata:\", syncError);\n  }\n}<\/code><\/pre>\n<p>Peki, React bile\u015fenlerinde bu yakla\u015f\u0131m neden yetersiz kal\u0131r? React&#8217;in \u00e7al\u0131\u015fma \u015fekli, \u00f6zellikle render a\u015famas\u0131 ve ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131, <code>try...catch<\/code> bloklar\u0131n\u0131n do\u011frudan UI hatalar\u0131n\u0131 yakalamas\u0131n\u0131 zorla\u015ft\u0131r\u0131r. <code>try...catch<\/code> bloklar\u0131, React&#8217;in bile\u015fen a\u011fac\u0131n\u0131n derinliklerinde, render metodlar\u0131 veya ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131 s\u0131ras\u0131nda olu\u015fan hatalar\u0131 yakalayamaz. Bunun temel nedeni, React&#8217;in render s\u00fcrecinin do\u011fas\u0131d\u0131r. React, bile\u015fenlerin render metodlar\u0131n\u0131 \u00e7a\u011f\u0131r\u0131r ve bu metodlar bir JSX a\u011fac\u0131 d\u00f6nd\u00fcr\u00fcr. Bu s\u00fcre\u00e7, genellikle React&#8217;in kendi dahili mekanizmalar\u0131 taraf\u0131ndan y\u00f6netilir ve <code>try...catch<\/code> bu ak\u0131\u015f\u0131n i\u00e7ine do\u011frudan m\u00fcdahale edemez.<\/p>\n<p>\u00d6rne\u011fin, a\u015fa\u011f\u0131daki gibi bir bile\u015fende render metodunda bir hata olu\u015fursa:<\/p>\n<pre><code class=\"language-javascript\">function BuggyComponent() {\n  \/\/ Bu sat\u0131r render s\u0131ras\u0131nda bir hata f\u0131rlatacak\n  throw new Error(\"Bu bir render hatas\u0131!\");\n  return <div>Hatas\u0131z i\u00e7erik<\/div>; \/\/ Bu asla render edilmez\n}\n\nfunction App() {\n  return (\n    <div>\n      \n      <BuggyComponent \/>\n    <\/div>\n  );\n}<\/code><\/pre>\n<p>Bu durumda, <code>BuggyComponent<\/code> i\u00e7indeki hata, <code>App<\/code> bile\u015feninin render metodunda veya herhangi bir \u00fcst bile\u015fenin <code>try...catch<\/code> blo\u011fu taraf\u0131ndan yakalanamaz. Sonu\u00e7 olarak, t\u00fcm uygulama beyaz bir ekranla \u00e7\u00f6kebilir veya React geli\u015ftirme ortam\u0131nda kullan\u0131c\u0131ya k\u00f6t\u00fc bir hata overlay&#8217;i g\u00f6sterebilir. Bu durum, \u00f6zellikle \u00fcretim ortam\u0131nda kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan kabul edilemezdir. \u0130\u015fte bu sorunu \u00e7\u00f6zmek i\u00e7in React, Hata S\u0131n\u0131rlar\u0131 konseptini tan\u0131tt\u0131.<\/p>\n<h3>Error Boundaries Nedir?<\/h3>\n<p>React Hata S\u0131n\u0131rlar\u0131 (Error Boundaries), alt bile\u015fen a\u011fac\u0131ndaki JavaScript hatalar\u0131n\u0131 yakalayan, bu hatalar\u0131n kayd\u0131n\u0131 tutan ve uygulaman\u0131n \u00e7\u00f6kmesini \u00f6nlemek i\u00e7in yedek bir kullan\u0131c\u0131 aray\u00fcz\u00fc (fallback UI) g\u00f6r\u00fcnt\u00fcleyen React bile\u015fenleridir. Bir hata s\u0131n\u0131r\u0131, bir bile\u015fenin render metodunda, ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131nda veya alt a\u011fac\u0131ndaki herhangi bir kurucu (constructor) metodunda olu\u015fan hatalar\u0131 yakalar.<\/p>\n<p><strong>Hata S\u0131n\u0131rlar\u0131 Neleri Yakalayabilir?<\/strong><\/p>\n<p>Hata S\u0131n\u0131rlar\u0131, a\u015fa\u011f\u0131daki senaryolarda olu\u015fan hatalar\u0131 yakalamak i\u00e7in tasarlanm\u0131\u015ft\u0131r:<\/p>\n<p>*   <strong>Render s\u0131ras\u0131nda olu\u015fan hatalar:<\/strong> Bir bile\u015fenin <code>render()<\/code> metodunda veya fonksiyonel bile\u015fenlerin ana g\u00f6vdesinde (JSX d\u00f6nd\u00fcren k\u0131s\u0131m) olu\u015fan hatalar.<br \/>\n*   <strong>Ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131ndaki hatalar:<\/strong> <code>constructor<\/code>, <code>componentDidMount<\/code>, <code>componentDidUpdate<\/code>, <code>shouldComponentUpdate<\/code>, <code>getDerivedStateFromProps<\/code> gibi s\u0131n\u0131f bile\u015feni ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131nda olu\u015fan hatalar.<br \/>\n*   <strong>Fonksiyonel bile\u015fenler i\u00e7indeki hook&#8217;lardaki hatalar:<\/strong> <code>useState<\/code>, <code>useEffect<\/code>, <code>useContext<\/code> gibi hook&#8217;lar i\u00e7inde olu\u015fan hatalar (dolayl\u0131 olarak, \u00e7\u00fcnk\u00fc bu hook&#8217;lar render faz\u0131nda veya ya\u015fam d\u00f6ng\u00fcs\u00fc faz\u0131nda tetiklenir).<br \/>\n*   <strong>Alt a\u011fa\u00e7taki hatalar:<\/strong> Hata S\u0131n\u0131r\u0131 bile\u015feninin sarmalad\u0131\u011f\u0131 herhangi bir alt bile\u015fenin yukar\u0131da belirtilen herhangi bir yerinde olu\u015fan hatalar.<\/p>\n<p><strong>Hata S\u0131n\u0131rlar\u0131 Neleri Yakalayamaz?<\/strong><\/p>\n<p>Hata S\u0131n\u0131rlar\u0131 her t\u00fcr hatay\u0131 yakalayamaz. \u00d6zellikle a\u015fa\u011f\u0131daki durumlarda olu\u015fan hatalar hata s\u0131n\u0131rlar\u0131 taraf\u0131ndan yakalanmaz ve geleneksel hata y\u00f6netimi y\u00f6ntemleri veya ba\u015fka yakla\u015f\u0131mlar gerektirir:<\/p>\n<p>*   <strong>Event handler&#8217;lardaki hatalar:<\/strong> \u00d6rne\u011fin, bir butona t\u0131klama olay\u0131nda \u00e7al\u0131\u015fan bir fonksiyonda olu\u015fan hatalar. Bu t\u00fcr hatalar <code>try...catch<\/code> bloklar\u0131 ile do\u011frudan y\u00f6netilebilir.<br \/>\n*   <strong>Asenkron kodlar:<\/strong> <code>setTimeout<\/code> veya <code>requestAnimationFrame<\/code> callback&#8217;leri, Promise&#8217;lerin <code>then<\/code>\/<code>catch<\/code> metodlar\u0131 i\u00e7inde olu\u015fan hatalar. Bu t\u00fcr hatalar genellikle kendi Promise hata i\u015fleyicileri veya <code>try...catch<\/code> ile ele al\u0131nmal\u0131d\u0131r.<br \/>\n*   <strong>Hata S\u0131n\u0131r\u0131n\u0131n kendisindeki hatalar:<\/strong> E\u011fer bir Hata S\u0131n\u0131r\u0131 bile\u015feni kendi <code>render()<\/code> metodunda veya ya\u015fam d\u00f6ng\u00fcs\u00fc metodunda hata f\u0131rlat\u0131rsa, bu hatay\u0131 kendi yakalayamaz. Bu durumda, hata hiyerar\u015fideki bir \u00fcst Hata S\u0131n\u0131r\u0131 taraf\u0131ndan yakalan\u0131r veya uygulaman\u0131n tamam\u0131 \u00e7\u00f6ker. Bu nedenle Hata S\u0131n\u0131r\u0131 bile\u015fenlerinin m\u00fcmk\u00fcn oldu\u011funca basit olmas\u0131 \u00f6nemlidir.<br \/>\n*   <strong>Sunucu taraf\u0131 render (SSR) hatalar\u0131:<\/strong> Hata S\u0131n\u0131rlar\u0131 yaln\u0131zca istemci taraf\u0131nda (taray\u0131c\u0131da) \u00e7al\u0131\u015f\u0131r.<\/p>\n<p>Hata S\u0131n\u0131rlar\u0131, React s\u0131n\u0131f bile\u015fenleri kullan\u0131larak olu\u015fturulur ve iki \u00f6zel ya\u015fam d\u00f6ng\u00fcs\u00fc metodunu uygular:<\/p>\n<p>1.  <code>static getDerivedStateFromError(error)<\/code>: Bir alt bile\u015fen hata f\u0131rlatt\u0131\u011f\u0131nda \u00e7a\u011fr\u0131l\u0131r. Bu metod, hatay\u0131 yakalad\u0131ktan sonra state&#8217;i g\u00fcncellemek i\u00e7in kullan\u0131l\u0131r ve yedek UI&#8217;\u0131n g\u00f6r\u00fcnt\u00fclenmesini sa\u011flar.<br \/>\n2.  <code>componentDidCatch(error, errorInfo)<\/code>: Bir alt bile\u015fen hata f\u0131rlatt\u0131\u011f\u0131nda \u00e7a\u011fr\u0131l\u0131r. Bu metod, hata hakk\u0131nda yan etkilere neden olmak i\u00e7in kullan\u0131l\u0131r, \u00f6rne\u011fin bir hata loglama servisine hatay\u0131 g\u00f6ndermek.<\/p>\n<h3>Error Boundaries Nas\u0131l Olu\u015fturulur?<\/h3>\n<p>Bir Hata S\u0131n\u0131r\u0131 olu\u015fturmak i\u00e7in, <code>React.Component<\/code>&#8216;ten t\u00fcreyen bir s\u0131n\u0131f bile\u015feni tan\u0131mlaman\u0131z ve yukar\u0131da bahsedilen iki ya\u015fam d\u00f6ng\u00fcs\u00fc metodunu uygulaman\u0131z gerekir. \u0130\u015fte basit bir Hata S\u0131n\u0131r\u0131 bile\u015feni \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-javascript\">import React from 'react';\n\nclass ErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { hasError: false, error: null, errorInfo: null };\n  }\n\n  \/\/ getDerivedStateFromError: Bir alt bile\u015fen hata f\u0131rlatt\u0131\u011f\u0131nda \u00e7a\u011fr\u0131l\u0131r.\n  \/\/ Bu metod, hatay\u0131 yakalad\u0131ktan sonra state'i g\u00fcncellemek i\u00e7in kullan\u0131l\u0131r.\n  static getDerivedStateFromError(error) {\n    \/\/ Bir sonraki render'da yedek UI'\u0131 g\u00f6stermek i\u00e7in state'i g\u00fcncelleyin.\n    return { hasError: true };\n  }\n\n  \/\/ componentDidCatch: Bir alt bile\u015fen hata f\u0131rlatt\u0131\u011f\u0131nda \u00e7a\u011fr\u0131l\u0131r.\n  \/\/ Bu metod, hata hakk\u0131nda yan etkilere neden olmak i\u00e7in kullan\u0131l\u0131r (\u00f6rn. loglama).\n  componentDidCatch(error, errorInfo) {\n    \/\/ Hata bilgilerini bir loglama servisine g\u00f6nderebilirsiniz.\n    console.error(\"ErrorBoundary yakalad\u0131:\", error, errorInfo);\n    \/\/ State'i g\u00fcncelleyerek hatan\u0131n detaylar\u0131n\u0131 UI'da g\u00f6sterebiliriz.\n    this.setState({\n      error: error,\n      errorInfo: errorInfo\n    });\n  }\n\n  render() {\n    if (this.state.hasError) {\n      \/\/ Yedek UI'\u0131 g\u00f6r\u00fcnt\u00fcleyebilirsiniz.\n      return (\n        <div style={{ padding: '20px', border: '1px solid red', borderRadius: '5px', backgroundColor: '#ffe6e6' }}>\n          <h2>Bir \u015feyler ters gitti!<\/h2>\n          <p>Uygulamada beklenmedik bir hata olu\u015ftu.<\/p>\n          {this.state.error && (\n            <details style={{ whiteSpace: 'pre-wrap' }}>\n              {this.state.error.toString()}\n              <br \/>\n              {this.state.errorInfo && this.state.errorInfo.componentStack}\n            <\/details>\n          )}\n          <button onClick={() => window.location.reload()}>Sayfay\u0131 Yenile<\/button>\n        <\/div>\n      );\n    }\n\n    \/\/ Normalde \u00e7ocuk bile\u015fenlerini render et.\n    return this.props.children;\n  }\n}\n\nexport default ErrorBoundary;<\/code><\/pre>\n<p>Yukar\u0131daki <code>ErrorBoundary<\/code> bile\u015feni, <code>hasError<\/code> ad\u0131nda bir state tutar. <code>static getDerivedStateFromError<\/code> metodu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, yani bir alt bile\u015fende hata olu\u015ftu\u011funda, <code>hasError<\/code> state&#8217;i <code>true<\/code> olarak ayarlan\u0131r. Bu durum, <code>render<\/code> metodunun farkl\u0131 bir \u00e7\u0131kt\u0131 d\u00f6nd\u00fcrmesini tetikler: Normalde <code>this.props.children<\/code>&#8216;\u0131 (yani sarmalad\u0131\u011f\u0131 bile\u015fenleri) render ederken, <code>hasError<\/code> <code>true<\/code> oldu\u011funda yedek bir hata UI&#8217;\u0131 g\u00f6r\u00fcnt\u00fcler.<\/p>\n<p><code>componentDidCatch<\/code> metodu ise hatan\u0131n detaylar\u0131n\u0131 (error nesnesi ve bile\u015fen y\u0131\u011f\u0131n\u0131 bilgisi olan <code>errorInfo<\/code>) al\u0131r. Bu metod, hatay\u0131 bir loglama servisine (\u00f6rne\u011fin Sentry, Bugsnag) g\u00f6ndermek veya geli\u015ftirme konsoluna yazd\u0131rmak gibi yan etkiler i\u00e7in idealdir. Ayr\u0131ca, <code>setState<\/code> \u00e7a\u011fr\u0131s\u0131 yaparak hatan\u0131n detaylar\u0131n\u0131 state&#8217;e kaydedip yedek UI&#8217;da daha a\u00e7\u0131klay\u0131c\u0131 bilgiler g\u00f6stermek i\u00e7in de kullan\u0131labilir.<\/p>\n<p><strong>Neden S\u0131n\u0131f Bile\u015feni Olmak Zorunda?<\/strong><\/p>\n<p>Hata S\u0131n\u0131rlar\u0131, React 16 ile tan\u0131t\u0131ld\u0131\u011f\u0131nda sadece s\u0131n\u0131f bile\u015fenleri olarak uygulanabiliyordu ve bu durum hala ge\u00e7erlidir. Bunun temel nedeni, <code>getDerivedStateFromError<\/code> ve <code>componentDidCatch<\/code> gibi ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131n\u0131n yaln\u0131zca s\u0131n\u0131f bile\u015fenlerinde bulunmas\u0131d\u0131r. Fonksiyonel bile\u015fenler ve Hook&#8217;lar, bu t\u00fcr ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131na do\u011frudan eri\u015fim sa\u011flamaz. Bu, React&#8217;in dahili olarak hatalar\u0131 nas\u0131l yakalay\u0131p i\u015fledi\u011fiyle ilgili bir mimari karard\u0131r.<\/p>\n<h3>Error Boundaries Nas\u0131l Kullan\u0131l\u0131r?<\/h3>\n<p>Bir Hata S\u0131n\u0131r\u0131 bile\u015feni olu\u015fturduktan sonra, onu kullanmak olduk\u00e7a basittir: Hata yakalamak istedi\u011finiz herhangi bir bile\u015feni veya bile\u015fen grubunu <code>ErrorBoundary<\/code> bile\u015feni ile sarmalaman\u0131z yeterlidir.<\/p>\n<pre><code class=\"language-javascript\">import React from 'react';\nimport ErrorBoundary from '.\/ErrorBoundary'; \/\/ Yukar\u0131daki ErrorBoundary bile\u015fenini import edin\n\n\/\/ Hata f\u0131rlatma potansiyeli olan bir bile\u015fen\nfunction BuggyComponent() {\n  const [counter, setCounter] = React.useState(0);\n\n  const handleClick = () => {\n    setCounter(prev => prev + 1);\n  };\n\n  \/\/ counter 3 oldu\u011funda hata f\u0131rlat\n  if (counter === 3) {\n    throw new Error('Ben BuggyComponent\\'im ve 3\\'e ula\u015ft\u0131\u011f\u0131mda patlar\u0131m!');\n  }\n\n  return (\n    <div>\n      <p>Saya\u00e7: {counter}<\/p>\n      <button onClick={handleClick}>Art\u0131r<\/button>\n    <\/div>\n  );\n}\n\nfunction App() {\n  return (\n    <div>\n      \n\n      {\/<em> T\u00fcm uygulamay\u0131 sarmalama <\/em>\/}\n      <ErrorBoundary>\n        <p>Bu, t\u00fcm uygulaman\u0131n sarmaland\u0131\u011f\u0131 bir b\u00f6l\u00fcm.<\/p>\n        <BuggyComponent \/>\n      <\/ErrorBoundary>\n\n      <hr \/>\n\n      {\/<em> Uygulaman\u0131n belirli bir b\u00f6l\u00fcm\u00fcn\u00fc sarmalama <\/em>\/}\n      <h2>Ayr\u0131 Bir B\u00f6l\u00fcm<\/h2>\n      <ErrorBoundary>\n        <p>Bu b\u00f6l\u00fcm kendi hata s\u0131n\u0131r\u0131na sahip.<\/p>\n        <BuggyComponent \/> {\/<em> Bu da 3 oldu\u011funda hata f\u0131rlat\u0131r <\/em>\/}\n      <\/ErrorBoundary>\n\n      <hr \/>\n\n      {\/<em> Hata s\u0131n\u0131r\u0131 olmayan bir b\u00f6l\u00fcm <\/em>\/}\n      <h2>Hatas\u0131z B\u00f6l\u00fcm<\/h2>\n      <p>Bu b\u00f6l\u00fcm hata s\u0131n\u0131r\u0131 ile sarmalanmad\u0131. E\u011fer burada bir hata olursa, uygulama \u00e7\u00f6ker.<\/p>\n      {\/<em> <BuggyComponent \/> - E\u011fer burada hata f\u0131rlat\u0131l\u0131rsa, yukar\u0131daki hata s\u0131n\u0131rlar\u0131 bunu yakalayamaz. <\/em>\/}\n    <\/div>\n  );\n}\n\nexport default App;<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>BuggyComponent<\/code> ad\u0131nda, sayac\u0131 3 oldu\u011funda bilerek hata f\u0131rlatan bir bile\u015fenimiz var. <code>App<\/code> bile\u015feni i\u00e7inde bu <code>BuggyComponent<\/code>&#8216;i iki farkl\u0131 <code>ErrorBoundary<\/code> ile sarmalad\u0131k.<\/p>\n<p>1.  <strong>T\u00fcm Uygulamay\u0131 Sarmalama:<\/strong> \u0130lk <code>ErrorBoundary<\/code>, <code>BuggyComponent<\/code>&#8216;i ve di\u011fer potansiyel bile\u015fenleri sarmalayarak uygulaman\u0131n genelinde olu\u015fan hatalar\u0131 yakalar. E\u011fer <code>BuggyComponent<\/code> hata f\u0131rlat\u0131rsa, bu <code>ErrorBoundary<\/code> devreye girer ve yedek UI&#8217;\u0131 g\u00f6sterir. Uygulaman\u0131n geri kalan\u0131 (e\u011fer varsa ve sarmalanmam\u0131\u015fsa) etkilenmeyebilir veya genel bir hata mesaj\u0131 g\u00f6sterilebilir.<br \/>\n2.  <strong>Belirli Bir B\u00f6l\u00fcm\u00fc Sarmalama:<\/strong> \u0130kinci <code>ErrorBoundary<\/code>, uygulaman\u0131n belirli bir b\u00f6l\u00fcm\u00fcn\u00fc veya tek bir bile\u015feni sarmalar. Bu, hatay\u0131 izole etmenize ve uygulaman\u0131n di\u011fer ba\u011f\u0131ms\u0131z b\u00f6l\u00fcmlerinin \u00e7al\u0131\u015fmaya devam etmesini sa\u011flaman\u0131za olanak tan\u0131r. \u00d6rne\u011fin, bir sidebar widget&#8217;\u0131 hata verdi\u011finde t\u00fcm ana i\u00e7eri\u011fin \u00e7\u00f6kmesini istemezsiniz.<\/p>\n<p><strong>\u0130\u00e7 \u0130\u00e7e Hata S\u0131n\u0131rlar\u0131:<\/strong> Birden fazla Hata S\u0131n\u0131r\u0131n\u0131 i\u00e7 i\u00e7e kullanmak da m\u00fcmk\u00fcnd\u00fcr. E\u011fer i\u00e7teki bir Hata S\u0131n\u0131r\u0131 kendi i\u00e7inde hata f\u0131rlat\u0131rsa veya bir hatay\u0131 yakalad\u0131ktan sonra kendisi d\u00fczg\u00fcn \u00e7al\u0131\u015fmazsa, d\u0131\u015ftaki Hata S\u0131n\u0131r\u0131 devreye girer. Bu, daha esnek ve katmanl\u0131 bir hata y\u00f6netimi stratejisi olu\u015fturman\u0131za yard\u0131mc\u0131 olabilir.<\/p>\n<h3>En \u0130yi Uygulamalar ve Dikkat Edilmesi Gerekenler<\/h3>\n<p>Hata S\u0131n\u0131rlar\u0131n\u0131 etkin bir \u015fekilde kullanmak, uygulaman\u0131z\u0131n kararl\u0131l\u0131\u011f\u0131n\u0131 ve kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Ancak, bunlar\u0131 uygularken baz\u0131 en iyi uygulamalar\u0131 ve dikkat edilmesi gereken noktalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir.<\/p>\n<h4>Granularite (Detay Seviyesi)<\/h4>\n<p>Hata S\u0131n\u0131rlar\u0131n\u0131 uygulaman\u0131z\u0131n hangi seviyesinde kullanaca\u011f\u0131n\u0131za karar vermek kritik bir \u00f6neme sahiptir:<\/p>\n<p>*   <strong>T\u00fcm Uygulamay\u0131 Sarmalama:<\/strong> Uygulaman\u0131z\u0131n en \u00fcst seviyesinde tek bir Hata S\u0131n\u0131r\u0131 kullanmak, uygulaman\u0131n tamamen \u00e7\u00f6kmesini \u00f6nlemek i\u00e7in basit ve etkili bir yoldur. Bu, genellikle &#8220;Bir \u015feyler ters gitti!&#8221; gibi genel bir mesaj g\u00f6sterir. Ancak, hatan\u0131n nerede meydana geldi\u011fi hakk\u0131nda kullan\u0131c\u0131ya spesifik bilgi vermez ve uygulaman\u0131n di\u011fer sa\u011fl\u0131kl\u0131 b\u00f6l\u00fcmlerinin de gizlenmesine neden olabilir.<br \/>\n*   <strong>Belirli Bile\u015fenleri veya Alt A\u011fa\u00e7lar\u0131 Sarmalama:<\/strong> Daha granular bir yakla\u015f\u0131m, uygulaman\u0131n farkl\u0131 b\u00f6l\u00fcmlerini veya potansiyel olarak hata f\u0131rlatabilecek ba\u011f\u0131ms\u0131z bile\u015fenleri ayr\u0131 Hata S\u0131n\u0131rlar\u0131 ile sarmalamakt\u0131r. \u00d6rne\u011fin, bir yorumlar b\u00f6l\u00fcm\u00fc, bir \u00fcr\u00fcn kart\u0131 veya bir analitik widget&#8217;\u0131 kendi hata s\u0131n\u0131r\u0131na sahip olabilir. Bu yakla\u015f\u0131m:<br \/>\n    *   <strong>Hatay\u0131 \u0130zole Eder:<\/strong> Bir b\u00f6l\u00fcm hata verse bile, uygulaman\u0131n geri kalan\u0131 \u00e7al\u0131\u015fmaya devam eder.<br \/>\n    *   <strong>Daha \u0130yi Kullan\u0131c\u0131 Deneyimi Sa\u011flar:<\/strong> Kullan\u0131c\u0131ya hatan\u0131n belirli bir b\u00f6l\u00fcmle ilgili oldu\u011funu g\u00f6sterir ve belki de o b\u00f6l\u00fcm\u00fc yenileme veya gizleme se\u00e7ene\u011fi sunar.<br \/>\n    *   <strong>Hata Ay\u0131klamay\u0131 Kolayla\u015ft\u0131r\u0131r:<\/strong> Hatan\u0131n hangi ba\u011flamda olu\u015ftu\u011funu daha net anlaman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<p>Genel olarak, her bile\u015feni sarmalamak a\u015f\u0131r\u0131ya ka\u00e7mak olabilir. Kritik veya ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015fan, \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphanelerden gelen veya karma\u015f\u0131k mant\u0131k i\u00e7eren bile\u015fenleri sarmalamak iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.<\/p>\n<h4>Yedek UI (Fallback UI) Tasar\u0131m\u0131<\/h4>\n<p>Hata S\u0131n\u0131r\u0131n\u0131n g\u00f6sterdi\u011fi yedek UI, kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan \u00e7ok \u00f6nemlidir. Sadece &#8220;Hata olu\u015ftu&#8221; yazan bir mesaj yerine, daha bilgilendirici ve kullan\u0131c\u0131 dostu bir aray\u00fcz tasarlamak gerekir:<\/p>\n<p>*   <strong>Basit ve A\u00e7\u0131k Mesaj:<\/strong> Kullan\u0131c\u0131ya ne oldu\u011funu a\u00e7\u0131klayan k\u0131sa ve net bir mesaj. &#8220;\u00dczg\u00fcn\u00fcz, bir sorun olu\u015ftu.&#8221;<br \/>\n*   <strong>Eylem \u00c7a\u011fr\u0131s\u0131:<\/strong> Kullan\u0131c\u0131n\u0131n yapabilece\u011fi bir sonraki ad\u0131m\u0131 belirtin. &#8220;L\u00fctfen sayfay\u0131 yenilemeyi deneyin&#8221; veya &#8220;Ana sayfaya d\u00f6nmek i\u00e7in buraya t\u0131klay\u0131n.&#8221;<br \/>\n*   <strong>\u0130leti\u015fim Bilgileri (Opsiyonel):<\/strong> Geli\u015ftirici ekibiyle ileti\u015fime ge\u00e7mek i\u00e7in bir e-posta adresi veya destek linki.<br \/>\n*   <strong>Detaylar\u0131 Gizleme (\u00dcretim Ortam\u0131nda):<\/strong> \u00dcretim ortam\u0131nda, kullan\u0131c\u0131ya do\u011frudan teknik hata detaylar\u0131n\u0131 (stack trace gibi) g\u00f6stermek yerine, bu bilgileri loglama servisine g\u00f6nderip kullan\u0131c\u0131ya daha sade bir mesaj sunmak daha iyidir. Geli\u015ftirme ortam\u0131nda ise detaylar\u0131 g\u00f6stermek hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>G\u00f6rsel Tutarl\u0131l\u0131k:<\/strong> Yedek UI&#8217;\u0131n uygulaman\u0131z\u0131n genel tasar\u0131m diliyle uyumlu olmas\u0131na dikkat edin.<\/p>\n<h4>Hata Loglama<\/h4>\n<p><code>componentDidCatch<\/code> metodu, hatalar\u0131 harici bir loglama servisine g\u00f6ndermek i\u00e7in ideal bir yerdir. Bu servisler (Sentry, Bugsnag, New Relic, Rollbar vb.) hatalar\u0131 toplar, gruplar, bildirimler g\u00f6nderir ve hata ay\u0131klama i\u00e7in de\u011ferli ba\u011flam bilgileri sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">componentDidCatch(error, errorInfo) {\n  \/\/ Hata bilgilerini bir loglama servisine g\u00f6nder\n  logErrorToService(error, errorInfo); \/\/ Kendi loglama fonksiyonunuz\n  this.setState({ error: error, errorInfo: errorInfo });\n}\n\nfunction logErrorToService(error, errorInfo) {\n  \/\/ \u00d6rnek: Sentry.captureException(error, { extra: errorInfo });\n  console.log(\"Hata logland\u0131:\", error, errorInfo);\n}<\/code><\/pre>\n<p>Bu, hatalar\u0131 proaktif olarak izlemenizi ve kullan\u0131c\u0131lar fark etmeden veya raporlamadan \u00f6nce d\u00fczeltmenizi sa\u011flar.<\/p>\n<h4>Hata S\u0131n\u0131r\u0131n\u0131n Kendisindeki Hatalar<\/h4>\n<p>Bir Hata S\u0131n\u0131r\u0131 bile\u015feni kendi <code>render()<\/code> metodunda veya ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131nda hata f\u0131rlat\u0131rsa, bu hatay\u0131 kendi yakalayamaz. Bu durumda:<\/p>\n<p>*   E\u011fer \u00fcst hiyerar\u015fide ba\u015fka bir Hata S\u0131n\u0131r\u0131 varsa, bu hata \u00fcstteki taraf\u0131ndan yakalan\u0131r.<br \/>\n*   E\u011fer \u00fcst hiyerar\u015fide ba\u015fka bir Hata S\u0131n\u0131r\u0131 yoksa, uygulama \u00e7\u00f6ker.<\/p>\n<p>Bu nedenle, Hata S\u0131n\u0131r\u0131 bile\u015fenlerinin m\u00fcmk\u00fcn oldu\u011funca basit ve hatas\u0131z olmas\u0131 kritik \u00f6neme sahiptir. Yedek UI&#8217;\u0131n\u0131z\u0131n ve <code>componentDidCatch<\/code> i\u00e7indeki loglama mant\u0131\u011f\u0131n\u0131z\u0131n kendisinin hata f\u0131rlatmad\u0131\u011f\u0131ndan emin olun.<\/p>\n<h4>Resetleme Mekanizmas\u0131<\/h4>\n<p>Bazen bir hata ge\u00e7ici olabilir veya kullan\u0131c\u0131 belirli bir eylemi yapt\u0131ktan sonra bile\u015fenin s\u0131f\u0131rlanmas\u0131n\u0131 isteyebiliriz. Hata S\u0131n\u0131r\u0131 i\u00e7indeki <code>hasError<\/code> state&#8217;ini <code>false<\/code>&#8216;a geri d\u00f6nd\u00fcrecek bir mekanizma sa\u011flayarak, sarmalanan bile\u015fenlerin yeniden render edilmesini sa\u011flayabiliriz.<\/p>\n<pre><code class=\"language-javascript\">class ErrorBoundary extends React.Component {\n  \/\/ ... di\u011fer kodlar ...\n\n  resetError = () => {\n    this.setState({ hasError: false, error: null, errorInfo: null });\n  };\n\n  render() {\n    if (this.state.hasError) {\n      return (\n        <div \/<em> ... <\/em>\/>\n          <h2>Bir \u015feyler ters gitti!<\/h2>\n          <button onClick={this.resetError}>Tekrar Dene<\/button>\n          {\/<em> ... di\u011fer hata bilgileri ... <\/em>\/}\n        <\/div>\n      );\n    }\n    return this.props.children;\n  }\n}<\/code><\/pre>\n<p>Bu <code>resetError<\/code> metodunu, yedek UI&#8217;daki bir butona ba\u011flayarak kullan\u0131c\u0131ya &#8220;Tekrar Dene&#8221; se\u00e7ene\u011fi sunabilirsiniz. Bu, \u00f6zellikle veri \u00e7ekme hatalar\u0131 gibi ge\u00e7ici durumlarda kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4>Geli\u015ftirme Ortam\u0131 vs. \u00dcretim Ortam\u0131<\/h4>\n<p>React, geli\u015ftirme ortam\u0131nda hatalar olu\u015ftu\u011funda genellikle tam ekran bir hata overlay&#8217;i g\u00f6sterir. Bu, geli\u015ftiriciler i\u00e7in hatay\u0131 h\u0131zl\u0131ca tespit etmeye ve d\u00fczeltmeye yard\u0131mc\u0131 olur. \u00dcretim ortam\u0131nda ise bu overlay&#8217;ler g\u00f6r\u00fcnmez ve Hata S\u0131n\u0131r\u0131n\u0131z\u0131n yedek UI&#8217;\u0131 devreye girer. Bu farkl\u0131 davran\u0131\u015f\u0131n fark\u0131nda olun ve hem geli\u015ftirme hem de \u00fcretim ortamlar\u0131nda Hata S\u0131n\u0131rlar\u0131n\u0131z\u0131n do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in testler yap\u0131n.<\/p>\n<h3>Fonksiyonel Bile\u015fenler ve Hook&#8217;lar ile Error Boundaries<\/h3>\n<p>Yukar\u0131da belirtildi\u011fi gibi, Hata S\u0131n\u0131rlar\u0131 sadece s\u0131n\u0131f bile\u015fenleri olarak uygulanabilir. Bu, fonksiyonel bile\u015fenlerin do\u011frudan bir Hata S\u0131n\u0131r\u0131 olamayaca\u011f\u0131 anlam\u0131na gelir. Ancak, fonksiyonel bile\u015fenler i\u00e7indeki hatalar, onlar\u0131 sarmalayan s\u0131n\u0131f tabanl\u0131 bir Hata S\u0131n\u0131r\u0131 taraf\u0131ndan yakalanabilir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Hata S\u0131n\u0131r\u0131 s\u0131n\u0131f bile\u015feni (yukar\u0131daki gibi)\nimport ErrorBoundary from '.\/ErrorBoundary';\n\n\/\/ Fonksiyonel bir bile\u015fen\nfunction MyFunctionalComponent() {\n  const [count, setCount] = React.useState(0);\n\n  const increment = () => {\n    if (count >= 2) {\n      throw new Error(\"Fonksiyonel bile\u015fen hatas\u0131!\");\n    }\n    setCount(count + 1);\n  };\n\n  return (\n    <div>\n      <p>Say\u0131m: {count}<\/p>\n      <button onClick={increment}>Art\u0131r<\/button>\n    <\/div>\n  );\n}\n\nfunction App() {\n  return (\n    <ErrorBoundary> {\/<em> Fonksiyonel bile\u015feni sarmal\u0131yoruz <\/em>\/}\n      \n      <MyFunctionalComponent \/>\n    <\/ErrorBoundary>\n  );\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>MyFunctionalComponent<\/code> bir fonksiyonel bile\u015fendir ve i\u00e7inde bir hata f\u0131rlat\u0131r. Bu hata, onu sarmalayan <code>ErrorBoundary<\/code> s\u0131n\u0131f bile\u015feni taraf\u0131ndan ba\u015far\u0131yla yakalan\u0131r.<\/p>\n<p><strong>\u00dc\u00e7\u00fcnc\u00fc Taraf K\u00fct\u00fcphaneler:<\/strong><\/p>\n<p>Fonksiyonel bile\u015fenlerde Hata S\u0131n\u0131rlar\u0131n\u0131 daha kolay kullanmak i\u00e7in <code>react-error-boundary<\/code> gibi \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphaneler mevcuttur. Bu k\u00fct\u00fcphaneler, size Hook benzeri bir API sunarak arka planda yine s\u0131n\u0131f tabanl\u0131 bir Hata S\u0131n\u0131r\u0131 uygular.<\/p>\n<pre><code class=\"language-javascript\">import { ErrorBoundary } from 'react-error-boundary';\n\nfunction ErrorFallback({ error, resetErrorBoundary }) {\n  return (\n    <div role=\"alert\">\n      <p>Bir \u015feyler ters gitti:<\/p>\n      <pre>{error.message}<\/pre>\n<p>      <button onClick={resetErrorBoundary}>Tekrar Dene<\/button>\n    <\/div>\n<p>  );<br \/>\n}<\/p>\n<p>function MyFunctionalComponent() {<br \/>\n  const [count, setCount] = React.useState(0);<\/p>\n<p>  const increment = () => {<br \/>\n    if (count >= 2) {<br \/>\n      throw new Error(\"Fonksiyonel bile\u015fen hatas\u0131!\");<br \/>\n    }<br \/>\n    setCount(count + 1);<br \/>\n  };<\/p>\n<p>  return (<\/p>\n<div>\n<p>Say\u0131m: {count}<\/p>\n<p>      <button onClick={increment}>Art\u0131r<\/button>\n    <\/div>\n<p>  );<br \/>\n}<\/p>\n<p>function App() {<br \/>\n  const handleReset = () => {<br \/>\n    \/\/ Uygulama state'ini s\u0131f\u0131rlama veya ba\u015fka bir temizlik i\u015flemi<br \/>\n    console.log(\"Hata sonras\u0131 s\u0131f\u0131rlama i\u015flemi yap\u0131ld\u0131.\");<br \/>\n  };<\/p>\n<p>  return (<br \/>\n    <ErrorBoundary\n      FallbackComponent={ErrorFallback}\n      onReset={handleReset}\n    ><\/p>\n<p>      <MyFunctionalComponent \/><br \/>\n    <\/ErrorBoundary><br \/>\n  );<br \/>\n}<\/code><\/p>\n<p><code>react-error-boundary<\/code> k\u00fct\u00fcphanesi, <code>FallbackComponent<\/code> prop&#8217;u arac\u0131l\u0131\u011f\u0131yla bir fonksiyonel bile\u015feni yedek UI olarak kullanman\u0131za olanak tan\u0131r ve <code>resetErrorBoundary<\/code> fonksiyonunu sa\u011flayarak bile\u015feni s\u0131f\u0131rlama mekanizmas\u0131 sunar. Bu, fonksiyonel bile\u015fen odakl\u0131 projelerde daha ergonomik bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<h3>\u00d6rnek Senaryolar ve Uygulamalar<\/h3>\n<p>Hata S\u0131n\u0131rlar\u0131, \u00e7e\u015fitli ger\u00e7ek d\u00fcnya senaryolar\u0131nda uygulaman\u0131z\u0131n dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 art\u0131rmak i\u00e7in kullan\u0131labilir:<\/p>\n<p>*   <strong>Veri \u00c7ekme Hatalar\u0131:<\/strong> Bir API&#8217;den veri \u00e7eken ve bu veriyi g\u00f6steren bir bile\u015fen d\u00fc\u015f\u00fcn\u00fcn. API yan\u0131t\u0131 beklenmedik bir formatta gelebilir, a\u011f hatas\u0131 olu\u015fabilir veya sunucu 500 hatas\u0131 d\u00f6nd\u00fcrebilir. Bu bile\u015feni bir Hata S\u0131n\u0131r\u0131 ile sarmalayarak, veri \u00e7ekme hatas\u0131 durumunda kullan\u0131c\u0131ya &#8220;Veriler y\u00fcklenemedi, l\u00fctfen daha sonra tekrar deneyin&#8221; mesaj\u0131n\u0131 g\u00f6sterebilirsiniz.<br \/>\n*   <strong>Kullan\u0131c\u0131 Giri\u015fi Do\u011frulama Hatalar\u0131:<\/strong> Karma\u015f\u0131k bir formda, kullan\u0131c\u0131 giri\u015fine dayal\u0131 olarak dinamik bir UI bile\u015feni olu\u015fturuluyor olabilir. Ge\u00e7ersiz bir giri\u015f, bu bile\u015fenin render s\u0131ras\u0131nda hata f\u0131rlatmas\u0131na neden olabilir. Hata S\u0131n\u0131r\u0131, bu durumu y\u00f6neterek formun di\u011fer b\u00f6l\u00fcmlerinin etkilenmemesini sa\u011flar.<br \/>\n*   <strong>\u00dc\u00e7\u00fcnc\u00fc Taraf K\u00fct\u00fcphane Entegrasyon Hatalar\u0131:<\/strong> Uygulaman\u0131za entegre etti\u011finiz bir harita bile\u015feni, grafik k\u00fct\u00fcphanesi veya ba\u015fka bir \u00fc\u00e7\u00fcnc\u00fc taraf bile\u015fen beklenmedik bir \u015fekilde hata f\u0131rlatabilir. Bu t\u00fcr bile\u015fenleri kendi Hata S\u0131n\u0131rlar\u0131 ile sarmalamak, uygulaman\u0131z\u0131n geri kalan\u0131n\u0131n bu d\u0131\u015f ba\u011f\u0131ml\u0131l\u0131klar\u0131n hatalar\u0131ndan etkilenmemesini sa\u011flar.<br \/>\n*   <strong>Kritik Olmayan Widget&#8217;lar:<\/strong> Bir e-ticaret sitesinde &#8220;\u0130lgili \u00dcr\u00fcnler&#8221; veya &#8220;Son G\u00f6r\u00fcnt\u00fclenenler&#8221; gibi widget&#8217;lar, ana al\u0131\u015fveri\u015f deneyimi i\u00e7in kritik de\u011fildir. Bu widget&#8217;lar hata verse bile, kullan\u0131c\u0131n\u0131n \u00fcr\u00fcn sat\u0131n alma s\u00fcrecinin devam etmesi istenir. Her bir widget&#8217;\u0131 kendi Hata S\u0131n\u0131r\u0131 ile sarmalayarak, hata durumunda sadece o widget&#8217;\u0131n devre d\u0131\u015f\u0131 kalmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>React Hata S\u0131n\u0131rlar\u0131, modern React uygulamalar\u0131nda hata y\u00f6netimini k\u00f6kten de\u011fi\u015ftiren g\u00fc\u00e7l\u00fc bir \u00f6zelliktir. Uygulaman\u0131z\u0131n beklenmedik JavaScript hatalar\u0131 nedeniyle tamamen \u00e7\u00f6kmesini \u00f6nleyerek, kullan\u0131c\u0131lar\u0131n\u0131za daha kararl\u0131 ve ho\u015f bir deneyim sunman\u0131z\u0131 sa\u011flar. <code>static getDerivedStateFromError<\/code> ve <code>componentDidCatch<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131 sayesinde, hatalar\u0131 yakalayabilir, yedek bir UI g\u00f6r\u00fcnt\u00fcleyebilir ve hatalar\u0131 harici loglama servislerine g\u00f6ndererek proaktif bir \u015fekilde izleyebilirsiniz.<\/p>\n<p>Hata S\u0131n\u0131rlar\u0131n\u0131 do\u011fru bir \u015fekilde uygulamak, granulariteyi dikkatlice planlamak, kullan\u0131c\u0131 dostu yedek UI&#8217;lar tasarlamak ve hata loglama mekanizmalar\u0131n\u0131 entegre etmekle m\u00fcmk\u00fcnd\u00fcr. Fonksiyonel bile\u015fenler do\u011frudan Hata S\u0131n\u0131r\u0131 olamazken, onlar\u0131 s\u0131n\u0131f tabanl\u0131 bir Hata S\u0131n\u0131r\u0131 ile sarmalayarak veya <code>react-error-boundary<\/code> gibi k\u00fct\u00fcphaneleri kullanarak etkin bir \u015fekilde y\u00f6netebilirsiniz.<\/p>\n<p>React uygulamalar\u0131n\u0131zda hata s\u0131n\u0131rlar\u0131n\u0131 benimsemek, hem geli\u015ftirici verimlili\u011fini art\u0131racak hem de uygulaman\u0131z\u0131n \u00fcretim ortam\u0131ndaki dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde g\u00fc\u00e7lendirecektir. Bu sayede, kullan\u0131c\u0131lar hatalarla kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda bile uygulaman\u0131z\u0131n genel kullan\u0131labilirli\u011fini koruyarak daha olumlu bir deneyim ya\u015famalar\u0131n\u0131 sa\u011flayabilirsiniz. Unutmay\u0131n, iyi bir uygulama sadece do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131nda de\u011fil, beklenmedik durumlarla kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda da iyi performans g\u00f6sterdi\u011finde kendini belli eder.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"React&#8217;te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r?\nReact uygulamalar\u0131, kullan\u0131c\u0131 aray\u00fczlerinin dinamik ve etkile\u015fimli yap\u0131s\u0131 s","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-38400","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 Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r? - 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-hata-sinirlari-error-boundaries-nasil-kullanilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React&#039;te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"React&#039;te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r? React uygulamalar\u0131, kullan\u0131c\u0131 aray\u00fczlerinin dinamik ve etkile\u015fimli yap\u0131s\u0131 s\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-30T11:40:59+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\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"React&#8217;te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r?\",\"datePublished\":\"2026-01-30T11:40:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/\"},\"wordCount\":3167,\"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-hata-sinirlari-error-boundaries-nasil-kullanilir\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/\",\"name\":\"React'te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-30T11:40:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React&#8217;te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r?\"}]},{\"@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 Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r? - 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-hata-sinirlari-error-boundaries-nasil-kullanilir\/","og_locale":"tr_TR","og_type":"article","og_title":"React'te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r?","og_description":"React'te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r? React uygulamalar\u0131, kullan\u0131c\u0131 aray\u00fczlerinin dinamik ve etkile\u015fimli yap\u0131s\u0131 s","og_url":"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-30T11:40:59+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\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"React&#8217;te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r?","datePublished":"2026-01-30T11:40:59+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/"},"wordCount":3167,"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-hata-sinirlari-error-boundaries-nasil-kullanilir\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/","url":"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/","name":"React'te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-30T11:40:59+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/reactte-hata-sinirlari-error-boundaries-nasil-kullanilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"React&#8217;te Hata S\u0131n\u0131rlar\u0131 (Error Boundaries) Nas\u0131l Kullan\u0131l\u0131r?"}]},{"@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\/38400","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=38400"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38400\/revisions"}],"predecessor-version":[{"id":38401,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38400\/revisions\/38401"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}