{"id":39086,"date":"2026-02-14T07:40:48","date_gmt":"2026-02-14T04:40:48","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=39086"},"modified":"2026-02-14T07:40:48","modified_gmt":"2026-02-14T04:40:48","slug":"reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/","title":{"rendered":"React&#8217;te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f"},"content":{"rendered":"<p><body><\/p>\n<h2>React&#8217;te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f<\/h2>\n<p>React, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in en pop\u00fcler JavaScript k\u00fct\u00fcphanelerinden biridir. Dinamik ve etkile\u015fimli kullan\u0131c\u0131 aray\u00fczleri olu\u015fturman\u0131n temel ta\u015flar\u0131ndan biri de dizileri (array) verimli bir \u015fekilde render etmektir. Bir e-ticaret sitesindeki \u00fcr\u00fcn listesinden bir sosyal medya ak\u0131\u015f\u0131ndaki g\u00f6nderilere, bir yap\u0131lacaklar listesindeki \u00f6\u011felerden bir tablodaki sat\u0131rlara kadar, \u00e7o\u011fu web uygulamas\u0131nda dinamik veri koleksiyonlar\u0131n\u0131 g\u00f6sterme ihtiyac\u0131 vard\u0131r. Bu makale, React&#8217;te dizileri render etmenin temellerinden en iyi uygulamalar\u0131na, performans optimizasyonlar\u0131ndan s\u0131k kar\u015f\u0131la\u015f\u0131lan hatalara kadar her y\u00f6n\u00fcn\u00fc derinlemesine inceleyecektir.<\/p>\n<p>React&#8217;te dizileri render etmek, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcz\u00fc veriye dayal\u0131 ve dinamik hale getirmenin anahtar\u0131d\u0131r. Bu s\u00fcre\u00e7, genellikle bir JavaScript dizisindeki her bir \u00f6\u011feyi al\u0131p, bu \u00f6\u011feyi temsil eden bir React bile\u015feni veya JSX eleman\u0131 olu\u015fturmay\u0131 i\u00e7erir. Bu sayede, verileriniz de\u011fi\u015ftik\u00e7e kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcz de otomatik olarak g\u00fcncellenir. Do\u011fru teknikleri kullanmak, uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131r\u0131rken, kodunuzu daha okunabilir ve bak\u0131m\u0131 kolay hale getirir.<\/p>\n<h3>Dizileri React&#8217;te Render Etmenin Temelleri<\/h3>\n<p>React&#8217;te bir diziyi render etmenin temel prensibi, JavaScript&#8217;in dizi metodlar\u0131n\u0131, \u00f6zellikle de <code>map()<\/code> metodunu kullanarak, her bir dizi \u00f6\u011fesini bir JSX eleman\u0131na d\u00f6n\u00fc\u015ft\u00fcrmektir. React, JSX elemanlar\u0131ndan olu\u015fan bir diziyi do\u011frudan DOM&#8217;a render edebilir.<\/p>\n<h4>Neden map() Metodu?<\/h4>\n<p>JavaScript&#8217;te bir dizinin elemanlar\u0131 \u00fczerinde d\u00f6nmek i\u00e7in <code>for<\/code> d\u00f6ng\u00fcs\u00fc, <code>forEach()<\/code> veya <code>map()<\/code> gibi \u00e7e\u015fitli metodlar bulunur. Ancak React ba\u011flam\u0131nda, <code>map()<\/code> metodu, dizileri render etmek i\u00e7in a\u00e7\u0131k ara en \u00e7ok tercih edilen ve \u00f6nerilen y\u00f6ntemdir. Bunun birka\u00e7 \u00f6nemli nedeni vard\u0131r:<\/p>\n<p><em>   <strong>Yeni Bir Dizi D\u00f6nd\u00fcr\u00fcr:<\/strong> <code>map()<\/code> metodu, orijinal diziyi de\u011fi\u015ftirmeden, callback fonksiyonunun her \u00e7a\u011fr\u0131s\u0131 i\u00e7in d\u00f6nd\u00fcr\u00fclen de\u011ferlerden olu\u015fan <\/em>yeni bir dizi* olu\u015fturur. React&#8217;in render mekanizmas\u0131 i\u00e7in bu, tam olarak ihtiya\u00e7 duyulan \u015feydir: JSX elemanlar\u0131ndan olu\u015fan bir dizi.<br \/>\n*   <strong>JSX Elemanlar\u0131 \u00dcretme Yetene\u011fi:<\/strong> <code>map()<\/code> i\u00e7inde kulland\u0131\u011f\u0131n\u0131z callback fonksiyonu, her bir dizi \u00f6\u011fesi i\u00e7in bir JSX eleman\u0131 (veya bir bile\u015fen) d\u00f6nd\u00fcrebilir. Bu elemanlar daha sonra React taraf\u0131ndan i\u015flenir ve DOM&#8217;a eklenir.<br \/>\n*   <strong>Fonksiyonel Programlama Prensibi:<\/strong> <code>map()<\/code> saf bir fonksiyonel programlama metodudur. Yan etkileri yoktur ve orijinal diziyi de\u011fi\u015ftirmez, bu da React&#8217;in bildirimsel (declarative) do\u011fas\u0131yla uyumludur.<\/p>\n<p>Di\u011fer metodlar neden tercih edilmez?<br \/>\n*   <strong><code>forEach()<\/code>:<\/strong> <code>forEach()<\/code> metodu, her bir \u00f6\u011fe \u00fczerinde bir i\u015flem yapar ancak bir de\u011fer d\u00f6nd\u00fcrmez. Dolay\u0131s\u0131yla, JSX elemanlar\u0131ndan olu\u015fan bir dizi olu\u015fturmak i\u00e7in do\u011frudan kullan\u0131lamaz.<br \/>\n*   <strong><code>for<\/code> d\u00f6ng\u00fcs\u00fc:<\/strong> Geleneksel <code>for<\/code> d\u00f6ng\u00fcs\u00fc kullan\u0131labilir olsa da, daha uzun ve daha az okunabilir bir kod yaz\u0131lmas\u0131na neden olur. Ayr\u0131ca, JSX elemanlar\u0131n\u0131 manuel olarak bir diziye eklemeniz gerekir, bu da <code>map()<\/code>&#8216;in sa\u011flad\u0131\u011f\u0131 kolayl\u0131\u011f\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<p><strong>Temel Kullan\u0131m \u00d6rne\u011fi:<\/strong><\/p>\n<p>A\u015fa\u011f\u0131daki \u00f6rnekte, bir <code>\u00fcr\u00fcnler<\/code> dizisindeki her bir \u00fcr\u00fcn i\u00e7in bir liste \u00f6\u011fesi ( <code><\/p>\n<li><\/code> ) nas\u0131l olu\u015fturulur g\u00f6sterilmi\u015ftir:\n<pre><code class=\"language-jsx\">import React from 'react';\n\nfunction UrunListesi() {\n  const urunler = [\n    { id: 1, ad: 'Laptop', fiyat: 1200 },\n    { id: 2, ad: 'Mouse', fiyat: 25 },\n    { id: 3, ad: 'Klavye', fiyat: 75 },\n  ];\n\n  return (\n    <div>\n      <h2>\u00dcr\u00fcnlerimiz<\/h2>\n      <ul>\n        {urunler.map(urun => (\n          <li key={urun.id}>\n            {urun.ad} - {urun.fiyat} TL\n          <\/li>\n        ))}\n      <\/ul>\n    <\/div>\n  );\n}\n\nexport default UrunListesi;<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>urunler.map()<\/code> metodu, <code>urunler<\/code> dizisindeki her <code>urun<\/code> objesi i\u00e7in bir <code><\/p>\n<li><\/code> eleman\u0131 d\u00f6nd\u00fcr\u00fcr. Bu <code>\n<li><\/code> elemanlar\u0131, JSX i\u00e7inde do\u011frudan <code>\n<ul><\/code> eleman\u0131n\u0131n \u00e7ocuklar\u0131 olarak yer al\u0131r.<\/p>\n<h4>JSX ve Eleman Dizileri<\/h4>\n<p>React, JSX i\u00e7inde JavaScript ifadelerini kullanman\u0131za olanak tan\u0131r. S\u00fcsl\u00fc parantezler <code>{}<\/code> i\u00e7ine yazd\u0131\u011f\u0131n\u0131z herhangi bir JavaScript ifadesi \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r ve sonucu render edilir. Bir diziyi render ederken, <code>map()<\/code> metodunun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc JSX elemanlar\u0131 dizisi, React taraf\u0131ndan otomatik olarak i\u015flenir.<\/p>\n<p>React, bir bile\u015fenin render metodundan veya bir fonksiyonel bile\u015fenin d\u00f6n\u00fc\u015f de\u011ferinden bir JSX eleman\u0131 dizisi d\u00f6nd\u00fcr\u00fcld\u00fc\u011f\u00fcnde, bu elemanlar\u0131 DOM&#8217;da s\u0131rayla olu\u015fturur. Yukar\u0131daki \u00f6rnekte <code>map()<\/code> metodunun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc, asl\u0131nda \u015f\u00f6yle bir yap\u0131ya benzer:<\/p>\n<pre><code class=\"language-jsx\">[\n  <li key={1}>Laptop - 1200 TL<\/li>,\n  <li key={2}>Mouse - 25 TL<\/li>,\n  <li key={3}>Klavye - 75 TL<\/li>,\n]<\/code><\/pre>\n<p>React bu diziyi al\u0131r ve her bir <code><\/p>\n<li><\/code> eleman\u0131n\u0131 <code>\n<ul><\/code> eleman\u0131n\u0131n i\u00e7ine yerle\u015ftirir. Bu yetenek, dinamik listeler, tablolar ve di\u011fer tekrarlayan UI desenleri olu\u015fturmay\u0131 son derece basit ve g\u00fc\u00e7l\u00fc k\u0131lar.<\/p>\n<h3>Key Prop&#8217;unun Vazge\u00e7ilmez \u00d6nemi<\/h3>\n<p>React&#8217;te dizileri render ederken kar\u015f\u0131la\u015faca\u011f\u0131n\u0131z en kritik konulardan biri <code>key<\/code> prop&#8217;udur. React geli\u015ftiricileri i\u00e7in neredeyse bir mantra haline gelmi\u015f olan &#8220;listelerde her eleman\u0131n benzersiz bir <code>key<\/code>&#8216;i olmal\u0131&#8221; kural\u0131, uygulaman\u0131z\u0131n performans\u0131 ve do\u011fru \u00e7al\u0131\u015fmas\u0131 a\u00e7\u0131s\u0131ndan hayati \u00f6nem ta\u015f\u0131r.<\/p>\n<h4>Key Nedir ve Neden Gereklidir?<\/h4>\n<p><code>key<\/code> prop&#8217;u, React&#8217;e bir listedeki her eleman\u0131 benzersiz bir \u015fekilde tan\u0131mlamak i\u00e7in yard\u0131mc\u0131 olan \u00f6zel bir dizedir. Bu prop, React&#8217;in dahili olarak kulland\u0131\u011f\u0131 &#8220;reconciliation&#8221; (uzla\u015ft\u0131rma) algoritmas\u0131n\u0131n bir par\u00e7as\u0131d\u0131r.<\/p>\n<p><strong>Reconciliation Algoritmas\u0131:<\/strong><br \/>\nReact, state veya prop&#8217;lar de\u011fi\u015fti\u011finde bir bile\u015feni yeniden render etmesi gerekti\u011finde, yeni d\u00f6nd\u00fcr\u00fclen JSX a\u011fac\u0131n\u0131 (sanal DOM) \u00f6ncekiyle kar\u015f\u0131la\u015ft\u0131r\u0131r. Bu kar\u015f\u0131la\u015ft\u0131rma sonucunda, ger\u00e7ek DOM&#8217;da hangi de\u011fi\u015fikliklerin yap\u0131lmas\u0131 gerekti\u011fini belirler. Bu s\u00fcrece reconciliation denir.<\/p>\n<p>Listeler s\u00f6z konusu oldu\u011funda, React&#8217;in hangi elemanlar\u0131n eklendi\u011fini, hangilerinin kald\u0131r\u0131ld\u0131\u011f\u0131n\u0131, hangilerinin g\u00fcncellendi\u011fini veya hangilerinin yeniden s\u0131raland\u0131\u011f\u0131n\u0131 verimli bir \u015fekilde anlamas\u0131 gerekir. E\u011fer <code>key<\/code> prop&#8217;u sa\u011flanmazsa veya yanl\u0131\u015f kullan\u0131l\u0131rsa, React bu kar\u015f\u0131la\u015ft\u0131rmay\u0131 yapmakta zorlan\u0131r ve bu durum \u00e7e\u015fitli sorunlara yol a\u00e7abilir:<\/p>\n<p>*   <strong>Performans D\u00fc\u015f\u00fc\u015f\u00fc:<\/strong> <code>key<\/code> olmadan, React listedeki elemanlar\u0131n s\u0131ras\u0131n\u0131 veya kimli\u011fini tahmin etmekte zorlan\u0131r. Bu durumda, her bir liste g\u00fcncellemesinde mevcut DOM elemanlar\u0131n\u0131 y\u0131k\u0131p yeniden olu\u015fturmak zorunda kalabilir, bu da performans\u0131 ciddi \u015fekilde etkiler. <code>key<\/code>&#8216;ler sayesinde React, ayn\u0131 <code>key<\/code>&#8216;e sahip elemanlar\u0131n ayn\u0131 &#8220;ger\u00e7ek&#8221; elemanlar oldu\u011funu bilir ve sadece de\u011fi\u015fen k\u0131s\u0131mlar\u0131 g\u00fcnceller.<br \/>\n*   <strong>Hatal\u0131 Durum (State) Y\u00f6netimi:<\/strong> E\u011fer liste elemanlar\u0131n\u0131z\u0131n kendi i\u00e7 state&#8217;leri varsa (\u00f6rne\u011fin, bir onay kutusunun i\u015faretli olup olmad\u0131\u011f\u0131), <code>key<\/code>&#8216;ler olmadan React, elemanlar\u0131n kimli\u011fini do\u011fru takip edemeyebilir. Bu, bir eleman silindi\u011finde veya yeniden s\u0131raland\u0131\u011f\u0131nda, yanl\u0131\u015f eleman\u0131n state&#8217;inin g\u00fcncellenmesine veya kaybolmas\u0131na neden olabilir.<br \/>\n*   <strong>Yanl\u0131\u015f Veri G\u00f6r\u00fcnt\u00fcleme:<\/strong> \u00d6zellikle dinamik listelerde (ekleme, silme, s\u0131ralama), <code>key<\/code>&#8216;lerin yanl\u0131\u015f kullan\u0131m\u0131, kullan\u0131c\u0131ya yanl\u0131\u015f verilerin g\u00f6sterilmesine yol a\u00e7abilir. \u00d6rne\u011fin, bir liste eleman\u0131n\u0131n i\u00e7eri\u011fi ba\u015fka bir elemana aitmi\u015f gibi g\u00f6r\u00fcnebilir.<\/p>\n<p><strong>Benzersizlik Gereksinimi:<\/strong><br \/>\nBir listedeki <code>key<\/code>&#8216;ler, <em>karde\u015f elemanlar aras\u0131nda<\/em> benzersiz olmal\u0131d\u0131r. Yani, ayn\u0131 ebeveyn alt\u0131nda render edilen elemanlar\u0131n farkl\u0131 <code>key<\/code>&#8216;leri olmal\u0131d\u0131r. Farkl\u0131 ebeveynler alt\u0131nda ayn\u0131 <code>key<\/code>&#8216;ler kullan\u0131labilir, ancak bu genellikle iyi bir uygulama de\u011fildir ve kafa kar\u0131\u015f\u0131kl\u0131\u011f\u0131na yol a\u00e7abilir.<\/p>\n<h4>Do\u011fru Key Se\u00e7imi<\/h4>\n<p><code>key<\/code> prop&#8217;unun ne kadar \u00f6nemli oldu\u011funu anlad\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi do\u011fru <code>key<\/code>&#8216;i nas\u0131l se\u00e7ece\u011fimize bakal\u0131m.<\/p>\n<p><strong>1. Benzersiz ve Stabil ID&#8217;ler (Veritaban\u0131 ID&#8217;leri, UUID&#8217;ler): En \u0130yi Pratik<\/strong><br \/>\nBir listedeki her \u00f6\u011fe i\u00e7in benzersiz ve stabil bir kimlik (ID) kullanmak, <code>key<\/code> prop&#8217;u i\u00e7in en ideal \u00e7\u00f6z\u00fcmd\u00fcr. Bu ID&#8217;ler genellikle veritaban\u0131ndan gelir veya bir k\u00fct\u00fcphane (\u00f6rne\u011fin <code>uuid<\/code>) arac\u0131l\u0131\u011f\u0131yla olu\u015fturulur. Bu t\u00fcr ID&#8217;ler, \u00f6\u011fenin ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca de\u011fi\u015fmez ve uygulaman\u0131n genelinde benzersizdir.<\/p>\n<pre><code class=\"language-jsx\">\/\/ Veritaban\u0131ndan gelen \u00fcr\u00fcnler\nconst urunler = [\n  { id: 'a1b2c3d4', ad: 'Laptop', fiyat: 1200 },\n  { id: 'e5f6g7h8', ad: 'Mouse', fiyat: 25 },\n  { id: 'i9j0k1l2', ad: 'Klavye', fiyat: 75 },\n];\n\n{urunler.map(urun => (\n  <li key={urun.id}> {\/<em> Benzersiz ve stabil ID kullan\u0131l\u0131yor <\/em>\/}\n    {urun.ad} - {urun.fiyat} TL\n  <\/li>\n))}<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, React&#8217;in reconciliation algoritmas\u0131n\u0131n en verimli \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bir eleman eklendi\u011finde, silindi\u011finde veya yeniden s\u0131raland\u0131\u011f\u0131nda, React do\u011fru <code>key<\/code>&#8216;e sahip eleman\u0131 h\u0131zl\u0131ca bulabilir ve sadece gerekli g\u00fcncellemeleri yapabilir.<\/p>\n<p><strong>2. Index (Dizin) Kullan\u0131m\u0131: Ne Zaman Kabul Edilebilir ve Ne Zaman Sorunlu?<\/strong><br \/>\n<code>map()<\/code> metodunun ikinci arg\u00fcman\u0131 olarak eleman\u0131n dizinini (index) alabiliriz: <code>map((item, index) => ...)<\/code> ve bu <code>index<\/code>&#8216;i <code>key<\/code> olarak kullanabiliriz.<\/p>\n<pre><code class=\"language-jsx\">\/\/ K\u00d6T\u00dc UYGULAMA (\u00e7o\u011fu durumda)\n{urunler.map((urun, index) => (\n  <li key={index}> {\/<em> Index key olarak kullan\u0131l\u0131yor <\/em>\/}\n    {urun.ad} - {urun.fiyat} TL\n  <\/li>\n))}<\/code><\/pre>\n<p><strong>Ne Zaman Kabul Edilebilir?<\/strong><br \/>\nIndex&#8217;i <code>key<\/code> olarak kullanmak sadece \u015fu \u00fc\u00e7 ko\u015fulun ayn\u0131 anda sa\u011fland\u0131\u011f\u0131 durumlarda kabul edilebilir:<\/p>\n<p>*   <strong>Liste ve elemanlar\u0131 statiktir:<\/strong> Liste elemanlar\u0131 asla de\u011fi\u015fmez (eklenmez, silinmez, yeniden s\u0131ralanmaz).<br \/>\n*   <strong>Liste elemanlar\u0131n\u0131n kendi i\u00e7 state&#8217;i yoktur:<\/strong> Elemanlar\u0131n kendi i\u00e7inde y\u00f6netti\u011fi bir durum (state) yoktur.<br \/>\n*   <strong>Liste asla filtrelenmez veya s\u0131ralanmaz:<\/strong> Elemanlar\u0131n s\u0131ras\u0131 veya varl\u0131\u011f\u0131 asla de\u011fi\u015fmez.<\/p>\n<p>Bu senaryolar olduk\u00e7a nadirdir ve genellikle sadece tamamen statik, de\u011fi\u015fmez bir UI par\u00e7as\u0131n\u0131 render ederken ge\u00e7erlidir.<\/p>\n<p><strong>Ne Zaman Sorunlu? (\u00c7o\u011fu Durum)<\/strong><br \/>\nE\u011fer yukar\u0131daki ko\u015fullardan herhangi biri sa\u011flanm\u0131yorsa, index&#8217;i <code>key<\/code> olarak kullanmak ciddi sorunlara yol a\u00e7ar:<\/p>\n<p>*   <strong>Dinamik Listeler (Ekleme, Silme, S\u0131ralama):<\/strong><br \/>\n    Bir liste eleman\u0131 silindi\u011finde veya eklendi\u011finde, di\u011fer elemanlar\u0131n dizinleri de\u011fi\u015fir. React, bu de\u011fi\u015fen dizinleri yeni bir eleman olarak alg\u0131layabilir veya mevcut elemanlar\u0131n yanl\u0131\u015f <code>key<\/code>&#8216;lere sahip oldu\u011funu d\u00fc\u015f\u00fcnebilir. Bu da DOM&#8217;da yanl\u0131\u015f g\u00fcncellemeler yap\u0131lmas\u0131na, performans sorunlar\u0131na ve hatal\u0131 UI g\u00f6r\u00fcnt\u00fcs\u00fcne yol a\u00e7ar.<\/p>\n<p>    <em>\u00d6rnek:<\/em><br \/>\n    <code>['A', 'B', 'C']<\/code> listesinde <code>key={index}<\/code> ile render edelim:<br \/>\n    <code>A (key=0)<\/code>, <code>B (key=1)<\/code>, <code>C (key=2)<\/code><\/p>\n<p>    \u015eimdi &#8216;B&#8217; eleman\u0131n\u0131 listeden \u00e7\u0131karal\u0131m: <code>['A', 'C']<\/code><br \/>\n    React \u015fimdi \u015fu elemanlar\u0131 g\u00f6r\u00fcr:<br \/>\n    <code>A (key=0)<\/code>, <code>C (key=1)<\/code><\/p>\n<p>    React, <code>key=0<\/code> olan eleman\u0131n hala <code>A<\/code> oldu\u011funu anlar. Ancak, <code>key=1<\/code> olan eleman\u0131n <code>B<\/code>&#8216;den <code>C<\/code>&#8216;ye de\u011fi\u015fti\u011fini d\u00fc\u015f\u00fcn\u00fcr. Ger\u00e7ekte olan ise <code>B<\/code>&#8216;nin silinip <code>C<\/code>&#8216;nin <code>key=1<\/code> pozisyonuna kaymas\u0131d\u0131r. React, <code>C<\/code>&#8216;yi yeni bir eleman olarak olu\u015fturmak yerine, <code>B<\/code>&#8216;nin i\u00e7eri\u011fini <code>C<\/code>&#8216;nin i\u00e7eri\u011fiyle g\u00fcncelleyebilir ve bu da beklenmedik davran\u0131\u015flara neden olabilir. \u00d6zellikle <code>C<\/code>&#8216;nin kendi i\u00e7inde bir state&#8217;i varsa (\u00f6rne\u011fin bir input alan\u0131), o input alan\u0131n\u0131n state&#8217;i <code>B<\/code>&#8216;den miras kalm\u0131\u015f gibi g\u00f6r\u00fcnebilir.<\/p>\n<p>*   <strong>Performans:<\/strong> Yeniden s\u0131ralama, ekleme ve silme i\u015flemlerinde index <code>key<\/code> olarak kullan\u0131ld\u0131\u011f\u0131nda, React&#8217;in DOM&#8217;da \u00e7ok daha fazla de\u011fi\u015fiklik yapmas\u0131 gerekebilir, bu da performans\u0131 olumsuz etkiler.<\/p>\n<p><strong><code>key<\/code> ve <code>id<\/code> Aras\u0131ndaki Fark:<\/strong><br \/>\n<code>key<\/code> prop&#8217;u, React&#8217;in dahili olarak kulland\u0131\u011f\u0131 \u00f6zel bir prop&#8217;tur ve DOM&#8217;a yans\u0131maz. Taray\u0131c\u0131n\u0131n geli\u015ftirici ara\u00e7lar\u0131nda bir eleman\u0131 inceledi\u011finizde <code>key<\/code>&#8216;i g\u00f6remezsiniz.<br \/>\n<code>id<\/code> prop&#8217;u ise standart bir HTML niteli\u011fidir ve DOM&#8217;da <code>id=\"...\"<\/code> \u015feklinde g\u00f6r\u00fcn\u00fcr. CSS, JavaScript veya eri\u015filebilirlik (accessibility) ama\u00e7lar\u0131 i\u00e7in kullan\u0131l\u0131r. Bir HTML eleman\u0131n\u0131n <code>id<\/code>&#8216;si, sayfa i\u00e7inde benzersiz olmal\u0131d\u0131r.<br \/>\nKar\u0131\u015ft\u0131rmamak \u00f6nemlidir: <code>key<\/code> React i\u00e7in, <code>id<\/code> ise DOM ve taray\u0131c\u0131 i\u00e7in bir tan\u0131mlay\u0131c\u0131d\u0131r. Genellikle ayn\u0131 de\u011feri kullan\u0131rlar (\u00f6rne\u011fin bir veritaban\u0131 ID&#8217;si), ancak farkl\u0131 ama\u00e7lara hizmet ederler.<\/p>\n<h3>Geli\u015fmi\u015f Senaryolar ve En \u0130yi Uygulamalar<\/h3>\n<p>Dizileri render etmenin temel prensiplerini ve <code>key<\/code> prop&#8217;unun \u00f6nemini anlad\u0131ktan sonra, daha karma\u015f\u0131k senaryolara ve en iyi uygulamalara ge\u00e7ebiliriz.<\/p>\n<h4>Ko\u015fullu Render Etme<\/h4>\n<p>Bir dizideki t\u00fcm \u00f6\u011feleri de\u011fil, belirli ko\u015fullar\u0131 sa\u011flayan \u00f6\u011feleri render etmek isteyebilirsiniz. Bunun iki ana yolu vard\u0131r:<\/p>\n<p><strong>1. <code>filter()<\/code> ile \u00d6n Filtreleme:<\/strong><br \/>\n<code>map()<\/code> metodunu \u00e7a\u011f\u0131rmadan \u00f6nce <code>filter()<\/code> metodunu kullanarak diziyi filtrelemek, yaln\u0131zca istedi\u011finiz \u00f6\u011felerin render d\u00f6ng\u00fcs\u00fcne girmesini sa\u011flar. Bu genellikle daha temiz ve okunabilir bir yakla\u015f\u0131md\u0131r.<\/p>\n<pre><code class=\"language-jsx\">function GorevListesi({ gorevler }) {\n  const tamamlanmisGorevler = gorevler.filter(gorev => gorev.tamamlandi);\n\n  return (\n    <div>\n      <h3>Tamamlanm\u0131\u015f G\u00f6revler<\/h3>\n      <ul>\n        {tamamlanmisGorevler.map(gorev => (\n          <li key={gorev.id}>{gorev.metin}<\/li>\n        ))}\n      <\/ul>\n    <\/div>\n  );\n}<\/code><\/pre>\n<p><strong>2. <code>map()<\/code> \u0130\u00e7inde Ko\u015fullu Mant\u0131k:<\/strong><br \/>\nBazen, her bir \u00f6\u011fe i\u00e7in farkl\u0131 bir JSX yap\u0131s\u0131 render etmek veya belirli ko\u015fullar alt\u0131nda hi\u00e7bir \u015fey render etmemek isteyebilirsiniz. Bunu <code>map()<\/code> callback&#8217;i i\u00e7inde ternary operat\u00f6r (<code>? :<\/code>) veya mant\u0131ksal <code>&&<\/code> operat\u00f6r\u00fc ile yapabilirsiniz.<\/p>\n<pre><code class=\"language-jsx\">function UrunListesi({ urunler }) {\n  return (\n    <ul>\n      {urunler.map(urun => (\n        <li key={urun.id}>\n          {urun.ad} - {urun.fiyat} TL\n          {urun.stok > 0 ? (\n            <span style={{ color: 'green' }}> (Stokta Var)<\/span>\n          ) : (\n            <span style={{ color: 'red' }}> (Stokta Yok)<\/span>\n          )}\n        <\/li>\n      ))}\n    <\/ul>\n  );\n}<\/code><\/pre>\n<p>E\u011fer bir \u00f6\u011feyi hi\u00e7 render etmek istemiyorsan\u0131z, callback fonksiyonundan <code>null<\/code> d\u00f6nd\u00fcrebilirsiniz. React, <code>null<\/code> veya <code>false<\/code> d\u00f6nd\u00fcr\u00fclen elemanlar\u0131 render etmez.<\/p>\n<pre><code class=\"language-jsx\">function KullaniciListesi({ kullanicilar }) {\n  return (\n    <ul>\n      {kullanicilar.map(kullanici => (\n        kullanici.aktif ? ( \/\/ Sadece aktif kullan\u0131c\u0131lar\u0131 g\u00f6ster\n          <li key={kullanici.id}>{kullanici.ad}<\/li>\n        ) : null\n      ))}\n    <\/ul>\n  );\n}<\/code><\/pre>\n<h4>\u0130\u00e7 \u0130\u00e7e Diziler ve Listeler<\/h4>\n<p>Bazen verileriniz i\u00e7 i\u00e7e diziler \u015feklinde olabilir (\u00f6rne\u011fin, bir men\u00fcdeki alt men\u00fcler, bir tablodaki h\u00fccreler). Bu durumda, i\u00e7 i\u00e7e <code>map()<\/code> \u00e7a\u011fr\u0131lar\u0131 kullanman\u0131z gerekir. Her seviyede benzersiz <code>key<\/code>&#8216;ler sa\u011flamak \u00f6nemlidir.<\/p>\n<pre><code class=\"language-jsx\">function Menu() {\n  const menuItems = [\n    {\n      id: 1,\n      ad: 'Elektronik',\n      altMenu: [\n        { id: 101, ad: 'Bilgisayarlar' },\n        { id: 102, ad: 'Telefonlar' },\n      ],\n    },\n    {\n      id: 2,\n      ad: 'Giyim',\n      altMenu: [\n        { id: 201, ad: 'Erkek Giyim' },\n        { id: 202, ad: 'Kad\u0131n Giyim' },\n      ],\n    },\n  ];\n\n  return (\n    <nav>\n      <ul>\n        {menuItems.map(item => (\n          <li key={item.id}>\n            {item.ad}\n            {item.altMenu && item.altMenu.length > 0 && (\n              <ul>\n                {item.altMenu.map(subItem => (\n                  <li key={subItem.id}>{subItem.ad}<\/li>\n                ))}\n              <\/ul>\n            )}\n          <\/li>\n        ))}\n      <\/ul>\n    <\/nav>\n  );\n}<\/code><\/pre>\n<p>Burada, d\u0131\u015f <code>map<\/code> ve i\u00e7 <code>map<\/code> \u00e7a\u011fr\u0131lar\u0131n\u0131n her ikisi de kendi benzersiz <code>key<\/code>&#8216;lerini kullan\u0131r. Bu, React&#8217;in her iki seviyedeki elemanlar\u0131 do\u011fru bir \u015fekilde izlemesini sa\u011flar.<\/p>\n<h4>Karma\u015f\u0131k Bile\u015fenleri Render Etme<\/h4>\n<p>Liste elemanlar\u0131n\u0131z genellikle basit HTML etiketlerinden daha fazlas\u0131d\u0131r; kendi state&#8217;leri ve prop&#8217;lar\u0131 olan daha karma\u015f\u0131k React bile\u015fenleri olabilirler.<\/p>\n<p><strong>Prop Ge\u00e7irme:<\/strong><br \/>\nDizi \u00f6\u011felerinden olu\u015fturdu\u011funuz her bir bile\u015fene, o \u00f6\u011feye ait verileri prop olarak ge\u00e7irebilirsiniz.<\/p>\n<pre><code class=\"language-jsx\">\/\/ UrunKart.jsx\nfunction UrunKart({ urun }) {\n  return (\n    <div className=\"urun-kart\">\n      <h3>{urun.ad}<\/h3>\n      <p>Fiyat: {urun.fiyat} TL<\/p>\n      <button onClick={() => console.log(<code>${urun.ad} sepete eklendi!<\/code>)}>Sepete Ekle<\/button>\n    <\/div>\n  );\n}\n\n\/\/ UrunListesi.jsx\nimport UrunKart from '.\/UrunKart';\n\nfunction UrunListesi({ urunler }) {\n  return (\n    <div className=\"urun-listesi\">\n      {urunler.map(urun => (\n        <UrunKart key={urun.id} urun={urun} \/>\n      ))}\n    <\/div>\n  );\n}<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, liste elemanlar\u0131n\u0131 soyutlaman\u0131za ve kodunuzu daha mod\u00fcler hale getirmenize olanak tan\u0131r. Her <code>UrunKart<\/code> bile\u015feni kendi verilerini al\u0131r ve kendi i\u00e7inde mant\u0131\u011f\u0131n\u0131 bar\u0131nd\u0131r\u0131r.<\/p>\n<p><strong>Olay Y\u00f6neticileri (Event Handlers):<\/strong><br \/>\nListe elemanlar\u0131na t\u0131klama, fareyle \u00fczerine gelme gibi olaylar\u0131 y\u00f6netmek i\u00e7in olay y\u00f6neticileri ekleyebilirsiniz. Genellikle, olay\u0131n hangi liste eleman\u0131ndan geldi\u011fini belirlemek i\u00e7in eleman\u0131n ID&#8217;sini veya verisini olay y\u00f6neticisine ge\u00e7irmeniz gerekir.<\/p>\n<pre><code class=\"language-jsx\">function GorevItem({ gorev, onToggleComplete, onDelete }) {\n  return (\n    <li className={gorev.tamamlandi ? 'tamamlandi' : ''}>\n      <span onClick={() => onToggleComplete(gorev.id)}>{gorev.metin}<\/span>\n      <button onClick={() => onDelete(gorev.id)}>Sil<\/button>\n    <\/li>\n  );\n}\n\nfunction GorevListesi({ gorevler }) {\n  const handleToggle = (id) => {\n    \/\/ ID'ye g\u00f6re g\u00f6revi g\u00fcncelleme mant\u0131\u011f\u0131\n    console.log(<code>Gorev ${id} tamamlanma durumu de\u011fi\u015ftirildi.<\/code>);\n  };\n\n  const handleDelete = (id) => {\n    \/\/ ID'ye g\u00f6re g\u00f6revi silme mant\u0131\u011f\u0131\n    console.log(<code>Gorev ${id} silindi.<\/code>);\n  };\n\n  return (\n    <ul>\n      {gorevler.map(gorev => (\n        <GorevItem\n          key={gorev.id}\n          gorev={gorev}\n          onToggleComplete={handleToggle}\n          onDelete={handleDelete}\n        \/>\n      ))}\n    <\/ul>\n  );\n}<\/code><\/pre>\n<p>Bu desende, olay y\u00f6neticisi fonksiyonlar\u0131 \u00fcst bile\u015fende tan\u0131mlan\u0131r ve alt bile\u015fenlere prop olarak ge\u00e7irilir. Alt bile\u015fenler, olay\u0131 tetiklediklerinde ilgili \u00f6\u011fenin ID&#8217;sini \u00fcst bile\u015fene geri g\u00f6nderir.<\/p>\n<h4>Bo\u015f Dizileri Zarif\u00e7e Y\u00f6netme<\/h4>\n<p>Bazen, bir dizinin bo\u015f olmas\u0131 durumunda kullan\u0131c\u0131ya bilgilendirici bir mesaj g\u00f6stermek isteyebilirsiniz. Bunu ko\u015fullu render etme ile kolayca yapabilirsiniz.<\/p>\n<pre><code class=\"language-jsx\">function KullaniciListesi({ kullanicilar }) {\n  return (\n    <div>\n      <h3>Kullan\u0131c\u0131lar<\/h3>\n      {kullanicilar.length > 0 ? (\n        <ul>\n          {kullanicilar.map(kullanici => (\n            <li key={kullanici.id}>{kullanici.ad}<\/li>\n          ))}\n        <\/ul>\n      ) : (\n        <p>Hen\u00fcz kay\u0131tl\u0131 kullan\u0131c\u0131 bulunmamaktad\u0131r.<\/p>\n      )}\n    <\/div>\n  );\n}<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, uygulaman\u0131z\u0131n daha kullan\u0131c\u0131 dostu olmas\u0131n\u0131 sa\u011flar ve bo\u015f state&#8217;leri a\u00e7\u0131k\u00e7a belirtir.<\/p>\n<h4>Performans Optimizasyonlar\u0131<\/h4>\n<p>\u00c7ok uzun listelerle \u00e7al\u0131\u015f\u0131rken performans sorunlar\u0131 ya\u015fanabilir. React&#8217;in varsay\u0131lan render mekanizmas\u0131 \u00e7o\u011fu durum i\u00e7in yeterli olsa da, binlerce eleman i\u00e7eren listelerde ek optimizasyonlara ihtiya\u00e7 duyulabilir.<\/p>\n<p><strong>1. <code>React.memo<\/code> Kullan\u0131m\u0131:<\/strong><br \/>\nE\u011fer liste \u00f6\u011feleriniz karma\u015f\u0131k bile\u015fenlerse ve prop&#8217;lar\u0131 de\u011fi\u015fmedi\u011fi s\u00fcrece yeniden render edilmelerine gerek yoksa, <code>React.memo<\/code> kullanarak onlar\u0131 memoize edebilirsiniz. Bu, React&#8217;in bir bile\u015feni yaln\u0131zca prop&#8217;lar\u0131 de\u011fi\u015fti\u011finde yeniden render etmesini sa\u011flar.<\/p>\n<pre><code class=\"language-jsx\">\/\/ Memoize edilmi\u015f UrunKart bile\u015feni\nconst MemoizedUrunKart = React.memo(UrunKart);\n\nfunction UrunListesi({ urunler }) {\n  return (\n    <div className=\"urun-listesi\">\n      {urunler.map(urun => (\n        <MemoizedUrunKart key={urun.id} urun={urun} \/>\n      ))}\n    <\/div>\n  );\n}<\/code><\/pre>\n<p><code>React.memo<\/code>&#8216;yu yaln\u0131zca performans sorunlar\u0131 ya\u015fad\u0131\u011f\u0131n\u0131zdan eminseniz kullan\u0131n, \u00e7\u00fcnk\u00fc kendisinin de bir maliyeti vard\u0131r.<\/p>\n<p><strong>2. Sanalla\u015ft\u0131rma (Virtualization):<\/strong><br \/>\nBinlerce hatta on binlerce liste eleman\u0131 i\u00e7eren \u00e7ok uzun listeler i\u00e7in sanalla\u015ft\u0131rma k\u00fct\u00fcphaneleri kullanmak en etkili \u00e7\u00f6z\u00fcmd\u00fcr. Sanalla\u015ft\u0131rma, ayn\u0131 anda sadece kullan\u0131c\u0131n\u0131n g\u00f6r\u00fcnt\u00fcleyebilece\u011fi kadar eleman\u0131 DOM&#8217;da render ederek performans\u0131 art\u0131r\u0131r. Listenin tamam\u0131n\u0131 DOM&#8217;a eklemek yerine, sadece g\u00f6r\u00fcn\u00fcr olan k\u0131sm\u0131 (veya hemen yan\u0131ndaki birka\u00e7 eleman\u0131) render eder ve kullan\u0131c\u0131 kayd\u0131rd\u0131k\u00e7a DOM elemanlar\u0131n\u0131 dinamik olarak g\u00fcnceller.<\/p>\n<p>Pop\u00fcler sanalla\u015ft\u0131rma k\u00fct\u00fcphaneleri:<br \/>\n*   <code>react-window<\/code> (daha hafif ve basit)<br \/>\n*   <code>react-virtualized<\/code> (daha fazla \u00f6zellik ve esneklik sunar)<\/p>\n<p>Bu k\u00fct\u00fcphaneler, listeleri kayd\u0131rma performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirebilir, ancak kurulumlar\u0131 ve kullan\u0131mlar\u0131 biraz daha karma\u015f\u0131kt\u0131r.<\/p>\n<h4>De\u011fi\u015fmez (Immutable) Veri Yap\u0131lar\u0131<\/h4>\n<p>React&#8217;te state y\u00f6netimi yaparken, diziler gibi karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 do\u011frudan de\u011fi\u015ftirmekten ka\u00e7\u0131nmak \u00f6nemlidir. Dizileri do\u011frudan de\u011fi\u015ftirmek (mutasyon), React&#8217;in de\u011fi\u015fiklikleri alg\u0131lamas\u0131n\u0131 zorla\u015ft\u0131rabilir ve beklenmedik render davran\u0131\u015flar\u0131na yol a\u00e7abilir. Bunun yerine, dizileri her zaman de\u011fi\u015fmez (immutable) bir \u015fekilde g\u00fcncellemelisiniz.<\/p>\n<p><strong>Yanl\u0131\u015f (Mutasyon):<\/strong><\/p>\n<pre><code class=\"language-javascript\">const yeniUrun = { id: 4, ad: 'Monit\u00f6r', fiyat: 300 };\nurunler.push(yeniUrun); \/\/ Bu, orijinal urunler dizisini de\u011fi\u015ftirir\nthis.setState({ urunler: urunler }); \/\/ React de\u011fi\u015fimi alg\u0131lamayabilir<\/code><\/pre>\n<p><strong>Do\u011fru (De\u011fi\u015fmez G\u00fcncelleme):<\/strong><br \/>\nDizileri g\u00fcncellemek i\u00e7in <code>spread<\/code> operat\u00f6r\u00fc (<code>...<\/code>) veya dizi metodlar\u0131n\u0131n ( <code>map()<\/code>, <code>filter()<\/code>, <code>slice()<\/code> ) yeni bir dizi d\u00f6nd\u00fcren versiyonlar\u0131n\u0131 kullan\u0131n.<\/p>\n<p>*   <strong>Ekleme:<\/strong><\/p>\n<pre><code class=\"language-javascript\">const yeniUrun = { id: 4, ad: 'Monit\u00f6r', fiyat: 300 };\n    const guncelUrunler = [...urunler, yeniUrun]; \/\/ Yeni bir dizi olu\u015fturur\n    this.setState({ urunler: guncelUrunler });<\/code><\/pre>\n<p>*   <strong>Silme:<\/strong><\/p>\n<pre><code class=\"language-javascript\">const idToDelete = 2;\n    const guncelUrunler = urunler.filter(urun => urun.id !== idToDelete); \/\/ Yeni bir dizi olu\u015fturur\n    this.setState({ urunler: guncelUrunler });<\/code><\/pre>\n<p>*   <strong>G\u00fcncelleme:<\/strong><\/p>\n<pre><code class=\"language-javascript\">const idToUpdate = 1;\n    const guncelUrunler = urunler.map(urun =>\n      urun.id === idToUpdate ? { ...urun, fiyat: 1300 } : urun \/\/ Yeni bir dizi olu\u015fturur\n    );\n    this.setState({ urunler: guncelUrunler });<\/code><\/pre>\n<p>Bu y\u00f6ntemler, React&#8217;in state de\u011fi\u015fikliklerini do\u011fru bir \u015fekilde alg\u0131lamas\u0131n\u0131 ve bile\u015fenleri gerekti\u011finde yeniden render etmesini sa\u011flar.<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Hatalar ve Sorun Giderme<\/h3>\n<p>Dizileri render ederken geli\u015ftiricilerin s\u0131k\u00e7a yapt\u0131\u011f\u0131 baz\u0131 hatalar vard\u0131r. Bu hatalar\u0131 bilmek, sorun gidermeyi kolayla\u015ft\u0131r\u0131r ve daha sa\u011flam uygulamalar yazman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<p>*   <strong><code>key<\/code> Uyar\u0131s\u0131:<\/strong> Konsolda &#8220;Warning: Each child in a list should have a unique &#8216;key&#8217; prop.&#8221; mesaj\u0131n\u0131 g\u00f6r\u00fcyorsan\u0131z, bu, bir listedeki elemanlara <code>key<\/code> prop&#8217;u vermedi\u011finiz veya benzersiz olmayan <code>key<\/code>&#8216;ler kulland\u0131\u011f\u0131n\u0131z anlam\u0131na gelir. Bu uyar\u0131y\u0131 asla g\u00f6z ard\u0131 etmeyin; yukar\u0131da bahsedilen performans ve do\u011fruluk sorunlar\u0131na yol a\u00e7abilir. Her zaman benzersiz ve stabil ID&#8217;ler kullanmaya \u00e7al\u0131\u015f\u0131n.<\/p>\n<p>*   <strong>Yanl\u0131\u015f <code>key<\/code> Kullan\u0131m\u0131 Kaynakl\u0131 Hatalar:<\/strong> Index&#8217;i <code>key<\/code> olarak kullanman\u0131n dinamik listelerde yol a\u00e7t\u0131\u011f\u0131 sorunlar en yayg\u0131n hatalardan biridir. Liste elemanlar\u0131 yeniden s\u0131raland\u0131\u011f\u0131nda, silindi\u011finde veya eklendi\u011finde, elemanlar\u0131n state&#8217;leri kar\u0131\u015fabilir veya yanl\u0131\u015f veriler g\u00f6r\u00fcnt\u00fclenebilir. \u00d6rne\u011fin, bir listedeki input alanlar\u0131n\u0131n de\u011ferlerinin kayd\u0131\u011f\u0131n\u0131 veya yanl\u0131\u015f elemana ait oldu\u011funu fark edebilirsiniz. Bu durumda <code>key<\/code> se\u00e7imini g\u00f6zden ge\u00e7irin.<\/p>\n<p>*   <strong>B\u00fcy\u00fck Listelerde Performans Sorunlar\u0131:<\/strong> Binlerce eleman i\u00e7eren listelerde uygulaman\u0131z yava\u015fl\u0131yorsa, scroll performans\u0131 d\u00fc\u015f\u00fckse, bu genellikle sanalla\u015ft\u0131rma ihtiyac\u0131n\u0131n bir i\u015faretidir. Taray\u0131c\u0131n\u0131n geli\u015ftirici ara\u00e7lar\u0131ndaki performans profiler\u0131n\u0131 kullanarak DOM manip\u00fclasyonlar\u0131n\u0131n ne kadar zaman ald\u0131\u011f\u0131n\u0131 kontrol edin. Sanalla\u015ft\u0131rma k\u00fct\u00fcphaneleri ( <code>react-window<\/code>, <code>react-virtualized<\/code> ) bu sorunu \u00e7\u00f6zebilir.<\/p>\n<p>*   <strong>Liste Elemanlar\u0131n\u0131n \u0130\u00e7indeki Durum (State) Y\u00f6netimi:<\/strong> Bir liste eleman\u0131n\u0131n kendi i\u00e7inde y\u00f6netti\u011fi bir state varsa (\u00f6rne\u011fin, bir \u00f6\u011fenin a\u00e7\u0131l\u0131p kapanma durumu), ve bu eleman\u0131n <code>key<\/code>&#8216;i de\u011fi\u015firse veya yanl\u0131\u015f se\u00e7ilirse, React o eleman\u0131n state&#8217;ini kaybedebilir veya ba\u015fka bir elemana yanl\u0131\u015fl\u0131kla atayabilir. Bu, kullan\u0131c\u0131 aray\u00fcz\u00fcnde tutars\u0131zl\u0131klara yol a\u00e7ar. Bu t\u00fcr durumlarda, <code>key<\/code>&#8216;in stabil ve benzersiz oldu\u011fundan emin olun.<\/p>\n<p>*   <strong>Dizi Mutasyonu:<\/strong> Dizileri do\u011frudan de\u011fi\u015ftirmek ( <code>push<\/code>, <code>pop<\/code>, <code>splice<\/code> gibi metodlarla) React&#8217;in de\u011fi\u015fiklikleri alg\u0131lamas\u0131n\u0131 zorla\u015ft\u0131r\u0131r ve bile\u015fenin yeniden render edilmemesine veya beklenmedik davran\u0131\u015flara neden olabilir. Her zaman <code>spread<\/code> operat\u00f6r\u00fc veya <code>map<\/code>, <code>filter<\/code> gibi yeni dizi d\u00f6nd\u00fcren metodlar\u0131 kullanarak de\u011fi\u015fmez g\u00fcncellemeler yap\u0131n.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>React&#8217;te dizileri render etmek, dinamik ve etkile\u015fimli kullan\u0131c\u0131 aray\u00fczleri olu\u015fturman\u0131n temel bir par\u00e7as\u0131d\u0131r. Bu s\u00fcre\u00e7te <code>map()<\/code> metodunu kullanmak, JSX elemanlar\u0131ndan olu\u015fan bir dizi d\u00f6nd\u00fcrmek ve her bir liste eleman\u0131na benzersiz ve stabil bir <code>key<\/code> prop&#8217;u atamak kritik \u00f6neme sahiptir. <code>key<\/code>&#8216;ler, React&#8217;in reconciliation algoritmas\u0131n\u0131n verimli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayarak uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131r\u0131r ve hatalar\u0131 \u00f6nler.<\/p>\n<p>Bu makalede ele al\u0131nan konular, React uygulamalar\u0131n\u0131zda listeleri g\u00fcvenilir ve verimli bir \u015fekilde y\u00f6netmeniz i\u00e7in sa\u011flam bir temel olu\u015fturmaktad\u0131r:<\/p>\n<p>*   <strong><code>map()<\/code> Metodunun G\u00fcc\u00fc:<\/strong> Dizileri JSX elemanlar\u0131na d\u00f6n\u00fc\u015ft\u00fcrmenin en etkili yolu.<br \/>\n*   <strong><code>key<\/code> Prop&#8217;unun Hayati \u00d6nemi:<\/strong> Performans, do\u011fru durum y\u00f6netimi ve hatas\u0131z UI i\u00e7in vazge\u00e7ilmez. Her zaman benzersiz ve stabil ID&#8217;ler kullan\u0131n.<br \/>\n*   <strong>Geli\u015fmi\u015f Teknikler:<\/strong> Ko\u015fullu render etme, i\u00e7 i\u00e7e diziler, karma\u015f\u0131k bile\u015fenleri y\u00f6netme ve bo\u015f listeleri zarif\u00e7e i\u015fleme.<br \/>\n*   <strong>Performans Optimizasyonlar\u0131:<\/strong> B\u00fcy\u00fck listeler i\u00e7in <code>React.memo<\/code> ve sanalla\u015ft\u0131rma gibi stratejiler.<br \/>\n*   <strong>De\u011fi\u015fmez Veri Yap\u0131lar\u0131:<\/strong> State g\u00fcncellemelerinde dizileri do\u011frudan de\u011fi\u015ftirmekten ka\u00e7\u0131narak tutarl\u0131l\u0131\u011f\u0131 sa\u011flama.<br \/>\n*   <strong>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Hatalardan Ka\u00e7\u0131nma:<\/strong> <code>key<\/code> uyar\u0131lar\u0131n\u0131 dikkate almak ve index&#8217;i <code>key<\/code> olarak kullanman\u0131n risklerini anlamak.<\/p>\n<p>Bu prensipleri anlayarak ve uygulayarak, React uygulamalar\u0131n\u0131zda listeleri ve dinamik veri koleksiyonlar\u0131n\u0131 daha sa\u011flam, daha performansl\u0131 ve bak\u0131m\u0131 daha kolay bir \u015fekilde olu\u015fturabilirsiniz. React&#8217;in g\u00fcc\u00fcn\u00fc tam olarak kullanmak i\u00e7in bu temel kavramlara hakim olmak, her React geli\u015ftiricisinin yolculu\u011funda \u00f6nemli bir ad\u0131md\u0131r.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"React&#8217;te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f\nReact, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in en pop\u00fcler Jav","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-39086","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 Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f - 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-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React&#039;te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f\" \/>\n<meta property=\"og:description\" content=\"React&#039;te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f React, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in en pop\u00fcler Jav\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-14T04:40:48+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-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"React&#8217;te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f\",\"datePublished\":\"2026-02-14T04:40:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/\"},\"wordCount\":3256,\"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-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/\",\"name\":\"React'te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-14T04:40:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React&#8217;te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f\"}]},{\"@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 Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f - 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-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/","og_locale":"tr_TR","og_type":"article","og_title":"React'te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f","og_description":"React'te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f React, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in en pop\u00fcler Jav","og_url":"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-14T04:40:48+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-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"React&#8217;te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f","datePublished":"2026-02-14T04:40:48+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/"},"wordCount":3256,"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-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/","url":"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/","name":"React'te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-14T04:40:48+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/reactte-dizilerin-etkili-bir-sekilde-olusturulmasi-derinlemesine-bir-bakis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"React&#8217;te Dizilerin Etkili Bir \u015eekilde Olu\u015fturulmas\u0131: Derinlemesine Bir Bak\u0131\u015f"}]},{"@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\/39086","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=39086"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39086\/revisions"}],"predecessor-version":[{"id":39087,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39086\/revisions\/39087"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39086"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39086"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}