<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by CaglarAcar on Medium]]></title>
        <description><![CDATA[Stories by CaglarAcar on Medium]]></description>
        <link>https://medium.com/@caglarracar?source=rss-6b824196d031------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*a-xqEZ2A8rVr-eoVtNV2XA.jpeg</url>
            <title>Stories by CaglarAcar on Medium</title>
            <link>https://medium.com/@caglarracar?source=rss-6b824196d031------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 07:13:15 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@caglarracar/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[React’in Karar Odası: Object.is Algoritması]]></title>
            <link>https://medium.com/@caglarracar/reactin-karar-odas%C4%B1-object-is-algoritmas%C4%B1-50d685563405?source=rss-6b824196d031------2</link>
            <guid isPermaLink="false">https://medium.com/p/50d685563405</guid>
            <category><![CDATA[objectis]]></category>
            <dc:creator><![CDATA[CaglarAcar]]></dc:creator>
            <pubDate>Wed, 11 Mar 2026 17:41:36 GMT</pubDate>
            <atom:updated>2026-03-11T17:41:36.709Z</atom:updated>
            <content:encoded><![CDATA[<p>React’te bir setState çağırdığınızda React hemen ekranı güncellemez. Önce elindeki &quot;eski değer&quot; ile senin verdiğin &quot;yeni değer&quot; arasında bir kıyaslama yapar. Eğer bu iki değer <strong>aynıysa</strong>, &quot;Boşuna yorulmayayım, render etmiyorum&quot; der. İşte bu kıyaslamayı yapan mekanizma <strong>Object.is</strong> algoritmasıdır . <strong>4 Aşamada bu konuyu ele alalım :</strong></p><h3>1. Neden Klasik Eşitlik (== veya ===) Yetmiyor?</h3><p>JavaScript’in doğuştan gelen bazı tuhaflıkları vardır. React ekibi, bu tuhaflıkların uygulamanın mantığını bozmasını istemediği için Object.is (Same-Value Equality) yöntemini seçti.</p><h4>A. NaN Problemi (Not-a-Number)</h4><p>JavaScript’te NaN, kendisine eşit olmayan tek değerdir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MBZoNw71SgN9HtV1drP3pw.png" /></figure><p>Eğer React === kullansaydı, state&#39;iniz NaN olduğunda her setState(NaN) çağrısında React &quot;Aaa değer değişmiş!&quot; sanıp sonsuz döngüye (infinite loop) girerdi. Object.is ise bu sorunu çözer:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Jg7YmiCevKhB911WfTojyw.png" /></figure><h4>B. +0 ve -0 Farkı</h4><p>Matematiksel olarak 0 her zaman 0&#39;dır ama bilgisayar biliminde işaretli sıfırlar vardır. === bunları aynı kabul eder ama Object.is farklı görür.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e1gvJbAxareBa1OSXH-tSA.png" /></figure><h3>2. Referans Tipleri: En Büyük Yanılgı</h3><p>Asıl “Advanced” kısım burası. Object.is primitive (ilkel) tiplerde (string, number, boolean) değerlere bakarken; <strong>Object ve Array’lerde sadece bellek adresine (referansa) bakar.</strong></p><h4>Senaryo: “Hani değişmişti?”</h4><p>Geliştiricilerin en çok düştüğü hata şudur:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LGyzXJxuthfFENyN-_yC-w.png" /></figure><p>Burada ekran <strong>güncellenmez.</strong> Neden?</p><ol><li>user değişkeni bellekte 0x001 adresinde duruyor.</li><li>Sen objenin içini değiştirdin ama adres hala 0x001.</li><li>React Object.is(eskiUser, yeniUser) yapar.</li><li>İkisi de 0x001 olduğu için sonuç true döner.</li><li>React: <strong>“Bailing Out”</strong> (Vazgeçiyorum, render yapmıyorum) der.</li></ol><h3>3. React Bu Algoritmayı Nasıl Uyguluyor?</h3><p>React’in içinde bu kontrolü yapan fonksiyonun (polyfill) mantığı şöyledir:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-N-IuqVr2YzlgCwYsFgSkg.png" /></figure><h3>4. Advanced Trick: “Eager State Update”</h3><p>React bazen o kadar akıllıdır ki, daha render aşamasına geçmeden Object.is ile kontrolü yapar. Buna <strong>Eager Update</strong> denir. Eğer yeni state eskisiyle aynıysa, React bileşeninizin gövdesini (body) bile çalıştırmaz. Bu, büyük uygulamalarda ciddi bir performans kazancıdır.</p><h3>Özetle Yazının Ana Mesajı:</h3><ul><li>React === kullanmaz, Object.is kullanır.</li><li>Bu sayede NaN gibi hatalardan kaçınır.</li><li>Objelerde içeriğe değil, <strong>referansa (adrese)</strong> bakar. Bu yüzden her zaman [...spread] ile yeni bir kopya oluşturmalıyız.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=50d685563405" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[React Advanced: useState’in Arka Planı ve Bilinmeyenleri]]></title>
            <link>https://medium.com/@caglarracar/react-temellerini-atal%C4%B1m-v1-1-usestate-componentlere-haf%C4%B1za-nas%C4%B1l-verilir-2d877c144547?source=rss-6b824196d031------2</link>
            <guid isPermaLink="false">https://medium.com/p/2d877c144547</guid>
            <category><![CDATA[reactjs]]></category>
            <category><![CDATA[react]]></category>
            <dc:creator><![CDATA[CaglarAcar]]></dc:creator>
            <pubDate>Wed, 11 Mar 2026 16:38:10 GMT</pubDate>
            <atom:updated>2026-03-11T17:42:15.639Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/984/1*qup0Y4M5S44pkxmdBEMI8A.png" /></figure><p>Sadece const [value, setValue] = useState() demekle yetinmeyelim; gelin bu işin mutfağına, <strong>Fiber Tree</strong> ve <strong>Memory Management</strong> tarafına bakalım.</p><h3>1. Hooks Dispatcher ve Mount vs. Update</h3><p>React, bir hook’un ilk kez mi çağrıldığını yoksa bir güncelleme mi olduğunu nasıl anlıyor? Arkada aslında iki farklı nesne çalışır: HooksDispatcherOnMount ve HooksDispatcherOnUpdate.</p><ul><li><strong>Mount anında:</strong> React, hook’u bağlı liste (linked list) yapısına ekler.</li><li><strong>Update anında:</strong> React, mevcut listeyi “reconcile” eder (uzlaştırır).</li></ul><blockquote><strong><em>Trick:</em></strong><em> Hook’ların neden </em><em>if veya </em><em>for içinde kullanılamadığının gerçek sebebi budur. Linked list sırasının bozulmaması gerekir!</em></blockquote><h3>2. State Batching (Otomatik Gruplandırma)</h3><p>React 18 ile gelen en büyük özelliklerden biri <strong>Automatic Batching</strong>. Eskiden sadece React event’lerinde çalışan bu özellik artık setTimeout, promises ve native events içinde de çalışıyor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Bv8ri69VJqfFlx3JALiEWA.png" /></figure><h3>3. Lazy Initial State (Performans Canavarı)</h3><p>Eğer useState içine doğrudan ağır bir işlem (örneğin localStorage okuma veya büyük bir array filtreleme) yazarsan, bu işlem <strong>her render&#39;da</strong> tekrar çalışır.</p><ul><li><strong>Yanlış:</strong> useState(heavyComputation())</li><li><strong>Doğru:</strong> useState(() =&gt; heavyComputation())</li></ul><p>Bu sayede fonksiyon sadece <strong>mount</strong> anında bir kez çalışır. Buna “Lazy Initialization” denir.</p><h3>4. Bailing Out of a State Update (Object.is)</h3><p>React, yeni state’in eskisiyle aynı olup olmadığını kontrol etmek için <a href="https://medium.com/p/50d685563405?postPublishedType=initial">Object.is</a> algoritmasını kullanır. Eğer değer değişmemişse React, render işlemini yarıda keser (<strong>Bail out</strong>).</p><ul><li><strong>Kritik Bilgi:</strong> Eğer bir objenin içindeki değeri değiştirip referansını değiştirmezsen (mutation), React değişikliği algılamaz ve sayfa güncellenmez. İmmutability’nin teknik sebebi budur.</li></ul><h3>5. useState vs. useReducer: Ne Zaman Hangisi?</h3><ul><li><strong>useState:</strong> Birbirinden bağımsız state’ler için.</li><li><strong>useReducer:</strong> Bir state değiştiğinde başka bir state’in de değişmesi gerekiyorsa (complex state logic) veya state geçişleri belirli kurallara (action) bağlıysa.</li></ul><h3>6. TypeScript ile “Strict” State Yönetimi</h3><p>Sadece number | null demek yerine, <strong>Discriminated Unions</strong> kullanarak state&#39;in imkansız durumlara (impossible states) düşmesini engelleyebilirsin:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dL9JwapDUrPBDQD1Wubr_w.png" /></figure><p>Bu yaklaşım, loading true iken aynı zamanda datanın var olması gibi mantık hatalarını kod yazarken engeller.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2d877c144547" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>