{"id":31412,"date":"2025-10-09T18:01:52","date_gmt":"2025-10-09T15:01:52","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/"},"modified":"2025-10-09T18:01:52","modified_gmt":"2025-10-09T15:01:52","slug":"styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/","title":{"rendered":"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma"},"content":{"rendered":"<p><body><\/p>\n<p>Modern web geli\u015ftirme d\u00fcnyas\u0131nda, kullan\u0131c\u0131 aray\u00fczleri giderek daha karma\u015f\u0131k ve dinamik hale geliyor. Bir frontend geli\u015ftiricisi olarak, s\u0131k s\u0131k tekrar eden ve farkl\u0131 i\u00e7eriklerle yeniden \u015fekillenen UI elemanlar\u0131 olu\u015fturma ihtiyac\u0131 duyar\u0131z. \u0130\u015fte bu noktada <strong>React kart bile\u015fenleri<\/strong> devreye giriyor. Peki, bu kartlar\u0131 her seferinde s\u0131f\u0131rdan yazmak yerine, <strong>Styled Components<\/strong>&#8216;\u0131n g\u00fcc\u00fcn\u00fc kullanarak nas\u0131l hem esnek hem de bak\u0131m\u0131 kolay, yeniden kullan\u0131labilir yap\u0131lar kurabiliriz? Bu makale, tasar\u0131m tutarl\u0131l\u0131\u011f\u0131n\u0131 ve geli\u015ftirme verimlili\u011fini art\u0131ran bu konuyu en ba\u015ftan ele alarak, ad\u0131m ad\u0131m pratik uygulamalarla size rehberlik edecek.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 tempolu dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131 aray\u00fczlerinin (UI) tutarl\u0131l\u0131\u011f\u0131 ve geli\u015ftirme s\u00fcre\u00e7lerinin verimlili\u011fi kritik \u00f6neme sahiptir. \u00d6zellikle React gibi bile\u015fen tabanl\u0131 k\u00fct\u00fcphanelerle \u00e7al\u0131\u015f\u0131rken, uygulaman\u0131z\u0131n farkl\u0131 yerlerinde benzer g\u00f6r\u00fcn\u00fcml\u00fc ancak farkl\u0131 i\u00e7eriklere sahip UI \u00f6\u011feleriyle s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131rs\u0131n\u0131z. Kartlar, bu t\u00fcr \u00f6\u011felerin en yayg\u0131n \u00f6rneklerinden biridir. \u00dcr\u00fcn listelemelerinden blog g\u00f6nderilerine, kullan\u0131c\u0131 profillerinden haber ba\u015fl\u0131klar\u0131na kadar pek \u00e7ok alanda kar\u015f\u0131m\u0131za \u00e7\u0131karlar. Her bir kart\u0131 uygulaman\u0131n farkl\u0131 bir b\u00f6l\u00fcm\u00fcnde ayr\u0131 ayr\u0131 stilize etmek ve kodlamak, bir dizi sorunu beraberinde getirir ki bu da yeniden kullan\u0131labilir bile\u015fenlere olan ihtiyac\u0131 do\u011furur.<\/p>\n<p>\u00d6ncelikle, kod tekrar\u0131 ka\u00e7\u0131n\u0131lmaz hale gelir. Ayn\u0131 veya \u00e7ok benzer CSS \u00f6zelliklerini ve HTML yap\u0131lar\u0131n\u0131 defalarca yazmak, hem geli\u015ftirme s\u00fcresini uzat\u0131r hem de projenin kod taban\u0131n\u0131 gereksiz yere \u015fi\u015firir. Bu durum, \u00f6zellikle b\u00fcy\u00fck ekiplerde veya uzun soluklu projelerde s\u00fcrd\u00fcr\u00fclebilirli\u011fi olumsuz etkiler. \u0130kincil olarak, tutars\u0131zl\u0131k riski artar. Bir tasar\u0131m de\u011fi\u015fikli\u011fi oldu\u011funda veya yeni bir \u00f6zellik eklendi\u011finde, her bir kart \u00f6rne\u011fini tek tek g\u00fcncellemek zorunda kal\u0131rs\u0131n\u0131z. Bu s\u00fcre\u00e7te g\u00f6zden ka\u00e7an detaylar, uygulaman\u0131z\u0131n farkl\u0131 b\u00f6l\u00fcmlerinde kartlar\u0131n farkl\u0131 g\u00f6r\u00fcnmesine, \u00f6rne\u011fin farkl\u0131 kenar bo\u015fluklar\u0131na, g\u00f6lge efektlerine veya yaz\u0131 tiplerine sahip olmas\u0131na neden olabilir. Bu tutars\u0131zl\u0131klar, kullan\u0131c\u0131 deneyimini olumsuz etkiler ve markan\u0131n g\u00f6rsel b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc bozar.<\/p>\n<p><strong>Peki, yeniden kullan\u0131labilir kart bile\u015fenleri bu sorunlar\u0131 nas\u0131l \u00e7\u00f6zer?<\/strong> Tek bir merkezi kart bile\u015feni olu\u015fturarak, t\u00fcm stil ve yap\u0131land\u0131rma mant\u0131\u011f\u0131n\u0131 bu bile\u015fende toplayabilirsiniz. Bu, bir stil de\u011fi\u015fikli\u011fi gerekti\u011finde yaln\u0131zca tek bir noktada g\u00fcncelleme yapman\u0131z gerekti\u011fi anlam\u0131na gelir. Sonu\u00e7 olarak, uygulaman\u0131z\u0131n genelinde tutarl\u0131l\u0131k sa\u011flan\u0131r ve bak\u0131m maliyetleri \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015fer. Geli\u015ftirme h\u0131z\u0131 artar \u00e7\u00fcnk\u00fc her yeni kart ihtiyac\u0131nda s\u0131f\u0131rdan ba\u015flamak yerine, mevcut bile\u015feni farkl\u0131 prop&#8217;lar (\u00f6zellikler) ile konfig\u00fcre ederek h\u0131zla kullan\u0131ma alabilirsiniz. Bu yakla\u015f\u0131m, bir tasar\u0131m sistemi olu\u015fturman\u0131n temelini atar ve frontend geli\u015ftirme s\u00fcre\u00e7lerini daha d\u00fczenli ve \u00f6ng\u00f6r\u00fclebilir hale getirir. \u00d6rne\u011fin, b\u00fcy\u00fck bir e-ticaret platformunda, \u00fcr\u00fcn kartlar\u0131, indirim kartlar\u0131, kategori kartlar\u0131 gibi farkl\u0131 g\u00f6r\u00fcn\u00fcmlerde y\u00fczlerce kart bulunabilir. E\u011fer her biri ayr\u0131 ayr\u0131 tasarlan\u0131p kodlanm\u0131\u015f olsayd\u0131, platformun s\u00fcrekli g\u00fcncellenen do\u011fas\u0131 g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, bu durum bir kabusa d\u00f6n\u00fc\u015febilirdi. Ancak yeniden kullan\u0131labilir bir ana kart bile\u015feni ve ondan t\u00fcretilen varyantlar sayesinde, tasar\u0131mc\u0131lar ve geli\u015ftiriciler \u00e7ok daha \u00e7evik ve etkile\u015fimli \u00e7al\u0131\u015fabilirler. Bu sayede, hem g\u00f6rsel tutarl\u0131l\u0131k korunur hem de yeni \u00f6zelliklerin veya kampanyalar\u0131n devreye al\u0131nmas\u0131 \u00e7ok daha h\u0131zl\u0131 ger\u00e7ekle\u015fir.<\/p>\n<h2>React ve Styled Components: M\u00fckemmel Bir \u0130kili mi?<\/h2>\n<p>React, dinamik kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak i\u00e7in vazge\u00e7ilmez bir k\u00fct\u00fcphane haline gelirken, stil y\u00f6netimi her zaman tart\u0131\u015fmal\u0131 bir konu olmu\u015ftur. Geleneksel CSS, mod\u00fclerlik ve kapsam y\u00f6netimi konusunda baz\u0131 zorluklar \u00e7\u0131kar\u0131rken, Styled Components gibi CSS-in-JS k\u00fct\u00fcphaneleri modern React geli\u015ftirme ak\u0131\u015f\u0131na adeta &#8220;cuk&#8221; oturur. Bu ikili, bile\u015fen tabanl\u0131 geli\u015ftirmenin t\u00fcm avantajlar\u0131n\u0131 stil y\u00f6netimiyle birle\u015ftirerek, daha d\u00fczenli, daha s\u00fcrd\u00fcr\u00fclebilir ve daha esnek bir geli\u015ftirme deneyimi sunar. \u015eimdi bu m\u00fckemmel ikilinin bile\u015fen tabanl\u0131 geli\u015ftirme \u00fczerindeki etkisine daha yak\u0131ndan bakal\u0131m.<\/p>\n<h3>React Bile\u015fenleri Neden Bu Kadar G\u00fc\u00e7l\u00fc?<\/h3>\n<p>React&#8217;\u0131n temel g\u00fcc\u00fc, her \u015feyi bile\u015fenler olarak d\u00fc\u015f\u00fcnme felsefesinden gelir. Bir web sayfas\u0131n\u0131, kendi i\u00e7inde ba\u011f\u0131ms\u0131z mant\u0131\u011f\u0131 ve g\u00f6r\u00fcn\u00fcm\u00fc olan k\u00fc\u00e7\u00fck, yeniden kullan\u0131labilir par\u00e7alara ay\u0131r\u0131rs\u0131n\u0131z. Bu bile\u015fenler, t\u0131pk\u0131 LEGO bloklar\u0131 gibi bir araya getirilerek karma\u015f\u0131k UI&#8217;lar olu\u015fturman\u0131z\u0131 sa\u011flar. Bu yakla\u015f\u0131m, kodun daha okunabilir, bak\u0131m\u0131 daha kolay ve test edilebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>React bile\u015fenleri iki ana t\u00fcrde olabilir: s\u0131n\u0131f bile\u015fenleri (class components) ve fonksiyonel bile\u015fenler (functional components). Modern React geli\u015ftirme genellikle fonksiyonel bile\u015fenleri ve React Hooks&#8217;u tercih eder \u00e7\u00fcnk\u00fc daha az kodla daha fazla i\u015f yapma esnekli\u011fi sunarlar. Bir bile\u015fenin g\u00fcc\u00fc, sahip oldu\u011fu prop&#8217;lar (properties) sayesinde artar. Prop&#8217;lar, bir bile\u015fene d\u0131\u015far\u0131dan veri aktarman\u0131n yoludur ve bile\u015fenin dinamik olarak farkl\u0131 i\u00e7erikler veya davran\u0131\u015flar sergilemesini sa\u011flar. \u00d6rne\u011fin, bir <code>Button<\/code> bile\u015fenine <code>color=\"primary\"<\/code> veya <code>onClick={handleSave}<\/code> gibi prop&#8217;lar g\u00f6ndererek, ayn\u0131 temel bile\u015fenin farkl\u0131 senaryolarda kullan\u0131labilmesini sa\u011flayabilirsiniz.<\/p>\n<p>Basit bir React fonksiyonel bile\u015feni \u00f6rne\u011fi \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<pre><code>\n\/\/ components\/MerhabaDunya.jsx\nimport React from 'react';\n\nfunction MerhabaDunya(props) {\n  return (\n    <div>\n      <h1>Merhaba, {props.isim || \"D\u00fcnya\"}!<\/h1>\n      <p>Bu basit bir React bile\u015fenidir.<\/p>\n    <\/div>\n  );\n}\n\nexport default MerhabaDunya;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>MerhabaDunya<\/code> bile\u015feni <code>isim<\/code> ad\u0131nda bir prop al\u0131r ve bu prop sayesinde dinamik bir ba\u015fl\u0131k olu\u015fturur. E\u011fer <code>isim<\/code> prop'u sa\u011flanmazsa \"D\u00fcnya\" varsay\u0131lan de\u011fer olarak kullan\u0131l\u0131r. Bu basit yap\u0131 bile, React'\u0131n yeniden kullan\u0131labilirlik ve dinamizm konusundaki temel felsefesini a\u00e7\u0131k\u00e7a ortaya koyar. Bir bile\u015fen tan\u0131mland\u0131\u011f\u0131nda, onu uygulaman\u0131z\u0131n istedi\u011finiz her yerinde \u00e7a\u011f\u0131rabilir ve farkl\u0131 prop'larla \u00f6zelle\u015ftirebilirsiniz. Bu sayede, ayn\u0131 yap\u0131sal kal\u0131p \u00fczerinden sonsuz varyasyonlar \u00fcretebilirsiniz, ki bu da kart bile\u015fenleri gibi tekrarlayan UI \u00f6\u011feleri i\u00e7in paha bi\u00e7ilmez bir \u00f6zelliktir.<\/p>\n<h3>Styled Components Nedir ve Ne \u0130\u015fe Yarar?<\/h3>\n<p>Styled Components, React bile\u015fenlerinize do\u011frudan JavaScript kodu i\u00e7inde CSS yazman\u0131z\u0131 sa\u011flayan pop\u00fcler bir CSS-in-JS k\u00fct\u00fcphanesidir. Geleneksel CSS'in k\u00fcresel kapsam (global scope) sorunlar\u0131na ve bile\u015fenler aras\u0131 stil \u00e7ak\u0131\u015fmalar\u0131na zarif bir \u00e7\u00f6z\u00fcm sunar. Styled Components ile yazd\u0131\u011f\u0131n\u0131z her stil, yaln\u0131zca belirli bir bile\u015fene ait olur, bu da mod\u00fclerli\u011fi art\u0131r\u0131r ve stil y\u00f6netimi \u00fczerindeki kontrol\u00fcn\u00fcz\u00fc geli\u015ftirir.<\/p>\n<p>Peki, Styled Components tam olarak ne i\u015fe yarar?<\/p>\n<ol>\n<li><strong>Kapsaml\u0131 (Scoped) CSS:<\/strong> Styled Components, her bir bile\u015fen i\u00e7in otomatik olarak benzersiz s\u0131n\u0131f adlar\u0131 (class names) olu\u015fturur. Bu, stillerinizin di\u011fer bile\u015fenlerin stilleriyle \u00e7ak\u0131\u015fmas\u0131n\u0131 engeller ve daha g\u00fcvenli bir stil ortam\u0131 sa\u011flar. Art\u0131k <code>!important<\/code> kullanmaya veya karma\u015f\u0131k BEM isimland\u0131rmalar\u0131 yapmaya gerek kalmaz.<\/li>\n<li><strong>Dinamik Stiller:<\/strong> Bile\u015fen prop'lar\u0131na veya durumlar\u0131na (state) g\u00f6re stilleri dinamik olarak de\u011fi\u015ftirebilirsiniz. Bu, bir butona t\u0131klan\u0131nca renginin de\u011fi\u015fmesi veya bir kart\u0131n i\u00e7eri\u011fine g\u00f6re boyutunun ayarlanmas\u0131 gibi senaryolarda inan\u0131lmaz esneklik sa\u011flar.<\/li>\n<li><strong>Tema Y\u00f6netimi:<\/strong> Uygulaman\u0131z genelinde renkler, yaz\u0131 tipleri, bo\u015fluklar gibi tasar\u0131m belirte\u00e7lerini merkezi bir yerden y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc bir tema (theming) sistemi sunar. Bu, uygulaman\u0131z\u0131n \"karanl\u0131k mod\" (dark mode) gibi farkl\u0131 temalar\u0131 kolayca desteklemesine olanak tan\u0131r.<\/li>\n<li><strong>Daha Az Soyutlama:<\/strong> CSS'i do\u011frudan bile\u015fenlerinizle birlikte yazars\u0131n\u0131z, bu da ilgili stilin hangi bile\u015fene ait oldu\u011funu anlamay\u0131 kolayla\u015ft\u0131r\u0131r. Stil dosyas\u0131n\u0131 ayr\u0131 bir yerden aramak yerine, her \u015fey tek bir yerde toplan\u0131r.<\/li>\n<\/ol>\n<p>Basit bir Styled Component \u00f6rne\u011fi:<\/p>\n<pre><code>\n\/\/ components\/StyledButton.jsx\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button<code>background-color: ${props => props.primary ? &#039;#007bff&#039; : &#039;#6c757d&#039;};\n  color: white;\n  padding: 10px 20px;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 16px;\n\n  &:hover {\n    opacity: 0.9;\n  }<\/code>;\n\nfunction MyButton({ children, primary, ...rest }) {\n  return (\n    <StyledButton primary={primary} {...rest}>\n      {children}\n    <\/StyledButton>\n  );\n}\n\nexport default MyButton;\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>StyledButton<\/code> ad\u0131nda bir buton bile\u015feni tan\u0131mlad\u0131k. Bu bile\u015fen, <code>primary<\/code> ad\u0131nda bir prop al\u0131yor ve bu prop'un de\u011ferine g\u00f6re arkaplan rengini de\u011fi\u015ftiriyor. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, stil do\u011frudan JavaScript \u015fablon dizisi (template literal) i\u00e7inde yaz\u0131l\u0131yor ve prop'lara kolayca eri\u015febiliyor. Bu, React'\u0131n bile\u015fen tabanl\u0131 mimarisiyle kusursuz bir uyum sa\u011flayarak, daha organize ve y\u00f6netilebilir stil kodlar\u0131 yazmam\u0131za olanak tan\u0131r. Styled Components, geli\u015ftiricilere sadece stil yazma de\u011fil, ayn\u0131 zamanda stillerini dinamik hale getirme ve projenin genel tasar\u0131m sistemine entegre etme yetene\u011fi sunar. Bu \u00f6zellikler, \u00f6zellikle yeniden kullan\u0131labilir kart bile\u015fenleri in\u015fa ederken paha bi\u00e7ilmez bir avantaj sa\u011flar.<\/p>\n<h2>Temel Bir Kart Bile\u015feni Nas\u0131l Olu\u015fturulur? Ad\u0131m Ad\u0131m Rehber<\/h2>\n<p>Art\u0131k React ve Styled Components'\u0131n neden bu kadar g\u00fc\u00e7l\u00fc bir ikili oldu\u011funu anlad\u0131\u011f\u0131m\u0131za g\u00f6re, ilk yeniden kullan\u0131labilir kart bile\u015fenimizi olu\u015fturmaya ge\u00e7ebiliriz. Bu b\u00f6l\u00fcmde, projemizi kurmaktan, temel kart yap\u0131s\u0131n\u0131 olu\u015fturmaya ve Styled Components ile stil vermeye kadar her ad\u0131m\u0131 detayl\u0131 bir \u015fekilde ele alaca\u011f\u0131z. Amac\u0131m\u0131z, basit ama etkili bir kart bile\u015feni olu\u015fturarak, ileri d\u00fczey konulara zemin haz\u0131rlamak.<\/p>\n<h3>Proje Kurulumu ve Gerekli K\u00fct\u00fcphaneler<\/h3>\n<p>\u0130lk olarak, React projemizi olu\u015fturmam\u0131z gerekiyor. Bunun i\u00e7in Vite veya Create React App gibi ara\u00e7lar\u0131 kullanabiliriz. Ben bu \u00f6rnekte daha modern ve h\u0131zl\u0131 bir se\u00e7enek olan Vite'\u0131 tercih edece\u011fim. Komut sat\u0131r\u0131na a\u015fa\u011f\u0131daki komutu yazarak yeni bir React projesi olu\u015fturabiliriz:<\/p>\n<pre><code>\nnpm create vite@latest my-card-app -- --template react\ncd my-card-app\nnpm install\n<\/pre>\n<p><\/code><\/p>\n<p>Projemiz olu\u015ftuktan ve ba\u011f\u0131ml\u0131l\u0131klar y\u00fcklendikten sonra, Styled Components k\u00fct\u00fcphanesini projemize dahil etmeliyiz. Bunu a\u015fa\u011f\u0131daki komutla yapabiliriz:<\/p>\n<pre><code>\nnpm install styled-components\n<\/pre>\n<p><\/code><\/p>\n<p>Kurulum tamamland\u0131\u011f\u0131nda, projemizin temel yap\u0131s\u0131 haz\u0131r demektir. Art\u0131k bile\u015fenlerimizi olu\u015fturmaya ba\u015flayabiliriz.<\/p>\n<h3><code>Card<\/code> Bile\u015feninin Temel Yap\u0131s\u0131<\/h3>\n<p>Bir kart genellikle bir resim, bir ba\u015fl\u0131k, bir a\u00e7\u0131klama ve bazen de bir aksiyon butonu gibi temel \u00f6\u011felerden olu\u015fur. Bu \u00f6\u011feleri kapsayan bir JSX yap\u0131s\u0131 ile ba\u015flayaca\u011f\u0131z. <code>src<\/code> klas\u00f6r\u00fcn\u00fcz\u00fcn i\u00e7ine <code>components<\/code> ad\u0131nda yeni bir klas\u00f6r olu\u015fturun ve i\u00e7ine <code>Card.jsx<\/code> ad\u0131nda bir dosya ekleyin. Bu dosyan\u0131n i\u00e7eri\u011fi \u015f\u00f6yle olabilir:<\/p>\n<pre><code>\n\/\/ src\/components\/Card.jsx\nimport React from 'react';\n\nfunction Card({ imageSrc, title, description, buttonText, onButtonClick }) {\n  return (\n    <div className=\"card-wrapper\">\n      <img src={imageSrc} alt={title} className=\"card-image\" \/>\n      <div className=\"card-content\">\n        <h3 className=\"card-title\">{title}<\/h3>\n        <p className=\"card-description\">{description}<\/p>\n        {buttonText && (\n          <button className=\"card-button\" onClick={onButtonClick}>\n            {buttonText}\n          <\/button>\n        )}\n      <\/div>\n    <\/div>\n  );\n}\n\nexport default Card;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu temel yap\u0131, kart\u0131m\u0131z\u0131n neye benzeyece\u011fine dair bir iskelet sa\u011flar. Prop'lar arac\u0131l\u0131\u011f\u0131yla d\u0131\u015far\u0131dan resim kayna\u011f\u0131, ba\u015fl\u0131k, a\u00e7\u0131klama ve buton metni gibi bilgileri alacak \u015fekilde tasarland\u0131. <code>onButtonClick<\/code> prop'u ise buton t\u0131kland\u0131\u011f\u0131nda \u00e7al\u0131\u015facak bir fonksiyonu belirtir. Bu haliyle, kart\u0131m\u0131z hen\u00fcz stil sahibi de\u011fil, sadece HTML elementlerinden olu\u015fuyor.<\/p>\n<h3>Styled Components ile Stilleme<\/h3>\n<p>\u015eimdi, az \u00f6nce olu\u015fturdu\u011fumuz HTML yap\u0131s\u0131n\u0131 Styled Components ile giydirelim. Ayn\u0131 <code>Card.jsx<\/code> dosyas\u0131 i\u00e7inde (veya ayr\u0131 bir <code>Card.styles.js<\/code> dosyas\u0131nda) Styled Components tan\u0131mlar\u0131m\u0131z\u0131 yapabiliriz. Her bir HTML eleman\u0131 i\u00e7in bir Styled Component olu\u015fturaca\u011f\u0131z. Bu yakla\u015f\u0131m, stillerimizin bile\u015fenlerimize \u00f6zel olmas\u0131n\u0131 ve \u00e7ak\u0131\u015fmalar\u0131n \u00f6n\u00fcne ge\u00e7mesini sa\u011flar.<\/p>\n<pre><code>\n\/\/ src\/components\/Card.jsx dosyas\u0131n\u0131n g\u00fcncellenmi\u015f hali\nimport React from 'react';\nimport styled from 'styled-components';\n\n\/\/ Styled Components tan\u0131mlar\u0131\nconst CardWrapper = styled.div<code>border: 1px solid #e0e0e0;\n  border-radius: 8px;\n  overflow: hidden;\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n  width: 300px; \/* Varsay\u0131lan geni\u015flik *\/\n  margin: 16px;\n  background-color: #fff;\n  transition: transform 0.2s ease-in-out;\n\n  &:hover {\n    transform: translateY(-5px);\n  }<\/code>;\n\nconst CardImage = styled.img<code>width: 100%;\n  height: 200px;\n  object-fit: cover;<\/code>;\n\nconst CardContent = styled.div<code>padding: 16px;<\/code>;\n\nconst CardTitle = styled.h3<code>font-size: 20px;\n  margin-bottom: 8px;\n  color: #333;<\/code>;\n\nconst CardDescription = styled.p<code>font-size: 14px;\n  color: #666;\n  line-height: 1.5;\n  margin-bottom: 16px;<\/code>;\n\nconst CardButton = styled.button<code>background-color: #007bff;\n  color: white;\n  padding: 10px 15px;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 15px;\n  transition: background-color 0.3s ease;\n\n  &:hover {\n    background-color: #0056b3;\n  }<\/code>;\n\nfunction Card({ imageSrc, title, description, buttonText, onButtonClick }) {\n  return (\n    <CardWrapper>\n      <CardImage src={imageSrc} alt={title} \/>\n      <CardContent>\n        <CardTitle>{title}<\/CardTitle>\n        <CardDescription>{description}<\/CardDescription>\n        {buttonText && (\n          <CardButton onClick={onButtonClick}>\n            {buttonText}\n          <\/CardButton>\n        )}\n      <\/CardContent>\n    <\/CardWrapper>\n  );\n}\n\nexport default Card;\n<\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Styled Components tan\u0131mlar\u0131n\u0131z\u0131 ayr\u0131 bir dosyada (\u00f6rne\u011fin <code>Card.styles.js<\/code>) tutmak, bile\u015fen mant\u0131\u011f\u0131 ile stil mant\u0131\u011f\u0131n\u0131 ay\u0131rarak kod okunabilirli\u011fini art\u0131r\u0131r. Daha sonra <code>import { CardWrapper, CardImage, ... } from '.\/Card.styles';<\/code> \u015feklinde i\u00e7e aktarabilirsiniz.<\/div>\n<p>Bu a\u015famada, <code>App.jsx<\/code> dosyan\u0131zda kart bile\u015fenini \u00e7a\u011f\u0131rarak nas\u0131l g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc test edebilirsiniz:<\/p>\n<pre><code>\n\/\/ src\/App.jsx\nimport React from 'react';\nimport Card from '.\/components\/Card';\nimport '.\/App.css'; \/\/ \u0130sterseniz global stiller i\u00e7in\n\nfunction App() {\n  const handleButtonClick = () => {\n    alert('Butona t\u0131kland\u0131!');\n  };\n\n  return (\n    <div className=\"app-container\">\n      <Card\n        imageSrc=\"https:\/\/via.placeholder.com\/300x200\"\n        title=\"Harika Bir \u00dcr\u00fcn\"\n        description=\"Bu \u00fcr\u00fcn, g\u00fcnl\u00fck ya\u015fam\u0131n\u0131z\u0131 kolayla\u015ft\u0131racak harika \u00f6zelliklere sahiptir. Hemen ke\u015ffedin!\"\n        buttonText=\"Daha Fazla Bilgi\"\n        onButtonClick={handleButtonClick}\n      \/>\n      <Card\n        imageSrc=\"https:\/\/via.placeholder.com\/300x200\/FF5733\/FFFFFF\"\n        title=\"Yeni Blog Yaz\u0131s\u0131\"\n        description=\"En son blog yaz\u0131m\u0131zda modern web geli\u015ftirme trendlerini inceledik. Okumaya ba\u015fla!\"\n        buttonText=\"Yaz\u0131y\u0131 Oku\"\n        onButtonClick={() => alert('Blog yaz\u0131s\u0131 okundu!')}\n      \/>\n    <\/div>\n  );\n}\n\nexport default App;\n<\/pre>\n<p><\/code><\/p>\n<p><code>App.css<\/code> dosyas\u0131na basit\u00e7e <code>.app-container { display: flex; flex-wrap: wrap; justify-content: center; }<\/code> gibi stil ekleyerek kartlar\u0131n yan yana g\u00f6r\u00fcnmesini sa\u011flayabilirsiniz. Bu kurulumla birlikte, ilk yeniden kullan\u0131labilir kart bile\u015fenimizi olu\u015fturmu\u015f olduk. Art\u0131k farkl\u0131 i\u00e7eriklerle ayn\u0131 kart yap\u0131s\u0131n\u0131 kullanarak uygulaman\u0131zda tutarl\u0131 bir g\u00f6r\u00fcn\u00fcm elde edebilirsiniz. Ancak bu sadece ba\u015flang\u0131\u00e7. Gelecek b\u00f6l\u00fcmlerde bu bile\u015feni daha da esnek ve g\u00fc\u00e7l\u00fc hale getirece\u011fiz.<\/p>\n<h2>Dinamik Prop'lar ile Kart Bile\u015fenini Daha Esnek Hale Getirme<\/h2>\n<p>\u00d6nceki b\u00f6l\u00fcmde temel bir kart bile\u015feni olu\u015fturduk. Ancak bu bile\u015fen hen\u00fcz tam anlam\u0131yla esnek de\u011fil; her kart ayn\u0131 boyutta ve ayn\u0131 varsay\u0131lan stil \u00f6zellikleri ile geliyor. Ger\u00e7ek d\u00fcnya uygulamalar\u0131nda, kartlar\u0131m\u0131z\u0131n farkl\u0131 senaryolara uyum sa\u011flamas\u0131 gerekir: bazen daha geni\u015f, bazen farkl\u0131 renklerde bir butona sahip, bazen de sadece bir resim ve ba\u015fl\u0131k i\u00e7eren minimalist bir g\u00f6r\u00fcn\u00fcmde olmas\u0131 beklenebilir. \u0130\u015fte bu noktada <strong>dinamik prop'lar<\/strong> devreye giriyor. Styled Components'\u0131n prop'lara eri\u015fim yetene\u011fi sayesinde, bile\u015fenlerimizin stillerini d\u0131\u015far\u0131dan gelen veriye g\u00f6re de\u011fi\u015ftirebilir, b\u00f6ylece kartlar\u0131m\u0131z\u0131 daha i\u015flevsel ve yeniden kullan\u0131labilir hale getirebiliriz.<\/p>\n<h3>\u0130\u00e7erik Prop'lar\u0131: <code>imageSrc<\/code>, <code>title<\/code>, <code>description<\/code>, <code>buttonText<\/code><\/h3>\n<p>Temel kart bile\u015fenimizde zaten <code>imageSrc<\/code>, <code>title<\/code>, <code>description<\/code>, <code>buttonText<\/code> gibi prop'lar kullanarak i\u00e7eri\u011fi dinamik hale getirmeyi g\u00f6rm\u00fc\u015ft\u00fck. Bu prop'lar sayesinde, ayn\u0131 <code>Card<\/code> bile\u015fenini farkl\u0131 veri setleriyle kullanarak farkl\u0131 \u00fcr\u00fcn kartlar\u0131, blog g\u00f6nderileri veya kullan\u0131c\u0131 profilleri olu\u015fturabiliyoruz. \u00d6nemli olan, bu prop'lar\u0131n her zaman mevcut olmamas\u0131 durumunda ne olaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnmektir.<\/p>\n<p>\u00d6rne\u011fin, bir kart\u0131n her zaman bir butona ihtiyac\u0131 olmayabilir. <code>buttonText<\/code> prop'unun varl\u0131\u011f\u0131n\u0131 kontrol ederek butonu ko\u015fullu olarak render edebiliriz. Bu, zaten \u00f6nceki kod \u00f6rne\u011fimizde yapm\u0131\u015ft\u0131k:<\/p>\n<pre><code>\n{buttonText && (\n  <CardButton onClick={onButtonClick}>\n    {buttonText}\n  <\/CardButton>\n)}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu yakla\u015f\u0131m, kart\u0131n yap\u0131s\u0131n\u0131 ihtiyaca g\u00f6re de\u011fi\u015ftirmemize olanak tan\u0131r ve gereksiz \u00f6\u011felerin bo\u015f yere olu\u015fturulmas\u0131n\u0131 engeller. Benzer \u015fekilde, e\u011fer bir <code>imageSrc<\/code> yoksa, varsay\u0131lan bir yer tutucu resim g\u00f6sterebilir veya resim alan\u0131n\u0131 tamamen gizleyebiliriz. \u0130\u00e7erik prop'lar\u0131n\u0131 bu \u015fekilde esnek y\u00f6netmek, bile\u015fenimizin farkl\u0131 kullan\u0131m senaryolar\u0131na kolayca adapte olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Stil Prop'lar\u0131: <code>variant<\/code>, <code>large<\/code>, <code>primary<\/code> gibi<\/h3>\n<p>\u0130\u00e7erik prop'lar\u0131 bile\u015fenin \"ne\" g\u00f6sterdi\u011fini belirlerken, stil prop'lar\u0131 \"nas\u0131l\" g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc kontrol eder. Styled Components'\u0131n en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri, stiller i\u00e7inde prop'lara eri\u015febilme yetene\u011fidir. Bu sayede, ayn\u0131 Styled Component'e farkl\u0131 prop'lar g\u00f6ndererek farkl\u0131 g\u00f6rsel varyasyonlar elde edebiliriz.<\/p>\n<p>\u00d6rnek olarak, kart\u0131m\u0131z\u0131n butonunun \"birincil\" (primary) veya \"ikincil\" (secondary) bir renge sahip olmas\u0131n\u0131 isteyebiliriz. Bunu bir <code>primary<\/code> prop'u ile kontrol edebiliriz:<\/p>\n<pre><code>\n\/\/ CardButton Styled Component'ini g\u00fcncelleyelim\nconst CardButton = styled.button<code>background-color: ${props => props.primary ? &#039;#007bff&#039; : &#039;#6c757d&#039;}; \/* Mavi veya Gri *\/\n  color: white;\n  padding: 10px 15px;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 15px;\n  transition: background-color 0.3s ease;\n\n  &:hover {\n    background-color: ${props => props.primary ? &#039;#0056b3&#039; : &#039;#5a6268&#039;};\n  }<\/code>;\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi <code>Card<\/code> bile\u015fenimizi kullan\u0131rken, butona <code>primary<\/code> prop'unu ekleyebiliriz:<\/p>\n<pre><code>\n\/\/ Card.jsx dosyas\u0131ndaki Card bile\u015feni i\u00e7inde\n\/\/ ...\n<CardButton onClick={onButtonClick} primary={true}> {\/* primary prop'u eklendi *\/}\n  {buttonText}\n<\/CardButton>\n\/\/ ...\n<\/pre>\n<p><\/code><\/p>\n<p>Bu sayede, butonumuz <code>primary<\/code> prop'u <code>true<\/code> oldu\u011funda mavi, <code>false<\/code> oldu\u011funda (veya hi\u00e7 belirtilmedi\u011finde) gri olacakt\u0131r. Benzer \u015fekilde, kart\u0131n genel geni\u015fli\u011fini kontrol etmek i\u00e7in bir <code>large<\/code> prop'u tan\u0131mlayabiliriz:<\/p>\n<pre><code>\n\/\/ CardWrapper Styled Component'ini g\u00fcncelleyelim\nconst CardWrapper = styled.div<code>border: 1px solid #e0e0e0;\n  border-radius: 8px;\n  overflow: hidden;\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n  width: ${props => props.large ? &#039;400px&#039; : &#039;300px&#039;}; \/* large prop&#039;una g\u00f6re geni\u015flik *\/\n  margin: 16px;\n  background-color: #fff;\n  transition: transform 0.2s ease-in-out;\n\n  &:hover {\n    transform: translateY(-5px);\n  }<\/code>;\n<\/pre>\n<p><\/code><\/p>\n<p>Ve <code>App.jsx<\/code> i\u00e7inde kullan\u0131rken:<\/p>\n<pre><code>\n<Card\n  imageSrc=\"https:\/\/via.placeholder.com\/400x250\/0000FF\/FFFFFF\"\n  title=\"Geni\u015f Kart \u00d6rne\u011fi\"\n  description=\"Bu kart, 'large' prop'u sayesinde di\u011ferlerinden daha geni\u015f g\u00f6r\u00fcnecektir.\"\n  buttonText=\"Detaylar\u0131 G\u00f6r\"\n  onButtonClick={handleButtonClick}\n  large={true} \/\/ large prop'u eklendi\n\/>\n<\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Styled Components'\u0131n <code>attrs<\/code> metodunu kullanarak HTML elementlerine do\u011frudan prop ge\u00e7irebilirsiniz. \u00d6rne\u011fin, <code>const StyledInput = styled.input.attrs(props => ({ type: props.type || 'text' }))<code>...<\/code>;<\/code> \u015feklinde varsay\u0131lan HTML \u00f6zelliklerini belirleyebilirsiniz.<\/div>\n<p>Bu dinamik prop yakla\u015f\u0131mlar\u0131, kart bile\u015fenimizin potansiyelini katlayarak art\u0131r\u0131r. Art\u0131k her bir kullan\u0131m senaryosu i\u00e7in yeni bir kart bile\u015feni olu\u015fturmak yerine, mevcut <code>Card<\/code> bile\u015fenimize basit\u00e7e farkl\u0131 prop'lar ge\u00e7irerek desired g\u00f6r\u00fcn\u00fcm ve i\u015flevselli\u011fi elde edebiliriz. Bu, kod tekrar\u0131n\u0131 azalt\u0131r, bak\u0131m kolayl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r ve tasar\u0131m sistemimizin daha tutarl\u0131 olmas\u0131n\u0131 sa\u011flar. Ancak unutmamal\u0131y\u0131z ki, \u00e7ok fazla prop ile bir bile\u015feni a\u015f\u0131r\u0131 karma\u015f\u0131k hale getirmek de iyi bir uygulama de\u011fildir. Belli bir noktadan sonra, bile\u015fen varyantlar\u0131 olu\u015fturmak veya tema y\u00f6netimi gibi daha geli\u015fmi\u015f tekniklere y\u00f6nelmek daha mant\u0131kl\u0131 olabilir.<\/p>\n<h2>Geli\u015fmi\u015f Kart Tasar\u0131mlar\u0131 ve Yeniden Kullan\u0131m Teknikleri<\/h2>\n<p>Temel ve dinamik kart bile\u015fenlerimizi olu\u015fturduk. \u015eimdi ise daha karma\u015f\u0131k senaryolar i\u00e7in kartlar\u0131m\u0131z\u0131 nas\u0131l daha esnek, tutarl\u0131 ve y\u00f6netilebilir hale getirebilece\u011fimize odaklanaca\u011f\u0131z. Bu b\u00f6l\u00fcmde, Styled Components'\u0131n sundu\u011fu tema y\u00f6netimi, bile\u015fen kompozisyonu ve duyarl\u0131 tasar\u0131m gibi ileri d\u00fczey teknikleri ele alarak, kartlar\u0131m\u0131z\u0131 her t\u00fcrl\u00fc projenin ihtiya\u00e7lar\u0131na cevap verebilecek kapasiteye ula\u015ft\u0131raca\u011f\u0131z.<\/p>\n<h3>Tema Y\u00f6netimi (Theming) ile Global Stiller<\/h3>\n<p>B\u00fcy\u00fck uygulamalarda, renk paletleri, yaz\u0131 tipi boyutlar\u0131, bo\u015fluklar ve di\u011fer tasar\u0131m belirte\u00e7leri gibi global stilleri merkezi bir yerden y\u00f6netmek hayati \u00f6nem ta\u015f\u0131r. Bu, uygulaman\u0131z\u0131n genel g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc ve hissini tutarl\u0131 tutarken, \u00f6rne\u011fin \"karanl\u0131k mod\" gibi farkl\u0131 temalar\u0131 kolayca uygulaman\u0131za olanak tan\u0131r. Styled Components, bu ihtiyac\u0131 kar\u015f\u0131lamak i\u00e7in <code>ThemeProvider<\/code> bile\u015feni ve <code>theme<\/code> prop'u arac\u0131l\u0131\u011f\u0131yla g\u00fc\u00e7l\u00fc bir tema y\u00f6netimi sistemi sunar.<\/p>\n<p>\u0130lk olarak, <code>theme.js<\/code> ad\u0131nda bir dosya olu\u015fturup tema de\u011fi\u015fkenlerimizi tan\u0131mlayal\u0131m:<\/p>\n<pre><code>\n\/\/ src\/theme.js\nexport const lightTheme = {\n  colors: {\n    primary: '#007bff',\n    secondary: '#6c757d',\n    text: '#333',\n    background: '#f8f9fa',\n    cardBackground: '#ffffff',\n    borderColor: '#e0e0e0'\n  },\n  spacing: {\n    small: '8px',\n    medium: '16px',\n    large: '24px'\n  },\n  borderRadius: '8px',\n  boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)'\n};\n\nexport const darkTheme = {\n  colors: {\n    primary: '#61dafb',\n    secondary: '#adb5bd',\n    text: '#f8f9fa',\n    background: '#343a40',\n    cardBackground: '#495057',\n    borderColor: '#6c757d'\n  },\n  spacing: {\n    small: '8px',\n    medium: '16px',\n    large: '24px'\n  },\n  borderRadius: '8px',\n  boxShadow: '0 4px 8px rgba(0, 0, 0, 0.3)'\n};\n<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, <code>App.jsx<\/code> dosyan\u0131zda <code>ThemeProvider<\/code>'\u0131 kullanarak bu temay\u0131 uygulaman\u0131za enjekte edebilirsiniz:<\/p>\n<pre><code>\n\/\/ src\/App.jsx\nimport React, { useState } from 'react';\nimport { ThemeProvider } from 'styled-components';\nimport { lightTheme, darkTheme } from '.\/theme';\nimport Card from '.\/components\/Card'; \/\/ Card bile\u015fenimiz\n\nfunction App() {\n  const [theme, setTheme] = useState(lightTheme);\n\n  const toggleTheme = () => {\n    setTheme(currentTheme =>\n      currentTheme === lightTheme ? darkTheme : lightTheme\n    );\n  };\n\n  return (\n    <ThemeProvider theme={theme}>\n      <div style={{ background: theme.colors.background, minHeight: '100vh', padding: '20px' }}>\n        <button onClick={toggleTheme} style={{ marginBottom: '20px', padding: '10px 20px' }}>\n          Temay\u0131 De\u011fi\u015ftir ({theme === lightTheme ? 'Karanl\u0131k Moda Ge\u00e7' : 'Ayd\u0131nl\u0131k Moda Ge\u00e7'})\n        <\/button>\n        <div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: 'center' }}>\n          <Card\n            imageSrc=\"https:\/\/via.placeholder.com\/300x200\"\n            title=\"Temal\u0131 Kart\"\n            description=\"Bu kart, uygulaman\u0131n aktif temas\u0131na g\u00f6re stilize edilmi\u015ftir.\"\n            buttonText=\"Ke\u015ffet\"\n          \/>\n        <\/div>\n      <\/div>\n    <\/ThemeProvider>\n  );\n}\n\nexport default App;\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi <code>Card<\/code> bile\u015fenimizdeki stilleri, <code>theme<\/code> prop'una eri\u015ferek g\u00fcncelleyebiliriz:<\/p>\n<pre><code>\n\/\/ src\/components\/Card.jsx dosyas\u0131nda stilleri g\u00fcncelleyelim\nconst CardWrapper = styled.div<code>border: 1px solid ${props => props.theme.colors.borderColor};\n  border-radius: ${props => props.theme.borderRadius};\n  overflow: hidden;\n  box-shadow: ${props => props.theme.boxShadow};\n  width: 300px;\n  margin: ${props => props.theme.spacing.medium};\n  background-color: ${props => props.theme.colors.cardBackground};\n  transition: transform 0.2s ease-in-out;\n\n  &:hover {\n    transform: translateY(-5px);\n  }<\/code>;\n\n\/\/ Di\u011fer stilleri de benzer \u015fekilde theme ile g\u00fcncelleyebilirsiniz\nconst CardTitle = styled.h3<code>font-size: 20px;\n  margin-bottom: ${props => props.theme.spacing.small};\n  color: ${props => props.theme.colors.text};<\/code>;\n\nconst CardButton = styled.button<code>background-color: ${props => props.primary ? props.theme.colors.primary : props.theme.colors.secondary};\n  color: ${props => props.theme.colors.text === &#039;#333&#039; ? &#039;white&#039; : props.theme.colors.text}; \/* Renk kontrast\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn *\/\n  padding: 10px 15px;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 15px;\n  transition: background-color 0.3s ease;\n\n  &:hover {\n    background-color: ${props => props.primary ? props.theme.colors.primary + &#039;d0&#039; : props.theme.colors.secondary + &#039;d0&#039;}; \/\/ Hover i\u00e7in hafif koyuluk\n  }<\/code>;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu y\u00f6ntemle, t\u00fcm uygulaman\u0131z\u0131n renk \u015femas\u0131n\u0131 veya tipografisini tek bir yerden kolayca de\u011fi\u015ftirebilirsiniz. Bu, b\u00fcy\u00fck projelerde tasar\u0131m tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak ve marka kimli\u011fini korumak i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<h3>Bile\u015fen Kompozisyonu ve Kal\u0131t\u0131m<\/h3>\n<p>Bazen temel bir kart bile\u015feninden yola \u00e7\u0131karak, ona \u00f6zel ek \u00f6zellikler veya stiller eklemek isteyebiliriz. Styled Components, <code>styled()<\/code> fonksiyonunu kullanarak mevcut bir bile\u015feni geni\u015fletme veya sarma (wrap) yetene\u011fi sunar. Bu, kod tekrar\u0131n\u0131 azalt\u0131rken bile\u015fenler aras\u0131nda mant\u0131ksal bir hiyerar\u015fi olu\u015fturman\u0131z\u0131 sa\u011flar.<\/p>\n<p>\u00d6rne\u011fin, bir \"\u00dcr\u00fcn Kart\u0131\" ve bir \"Blog Yaz\u0131s\u0131 Kart\u0131\" olu\u015fturmak isteyelim. Her ikisi de <code>Card<\/code> bile\u015fenimizin temel yap\u0131s\u0131n\u0131 kullanacak ama ek olarak kendilerine \u00f6zg\u00fc \u00f6zelliklere sahip olacaklar.<\/p>\n<pre><code>\n\/\/ src\/components\/ProductCard.jsx\nimport React from 'react';\nimport styled from 'styled-components';\nimport Card from '.\/Card'; \/\/ Temel Card bile\u015fenimizi i\u00e7e aktar\u0131yoruz\n\n\/\/ Card bile\u015fenini geni\u015fleterek ProductCardWrapper olu\u015fturuyoruz\nconst ProductCardWrapper = styled(Card)<code>\/* ProductCard&#039;a \u00f6zg\u00fc ek stiller veya varsay\u0131lan prop&#039;lar *\/\n  background-color: #f0f8ff; \/* A\u00e7\u0131k mavi arka plan *\/\n  border-color: #add8e6;\n  \n  ${CardTitle} {\n    color: #28a745; \/* Ye\u015fil ba\u015fl\u0131k *\/\n  }<\/code>;\n\nfunction ProductCard({ price, ...props }) {\n  return (\n    <ProductCardWrapper {...props} buttonText=\"\u00dcr\u00fcn\u00fc G\u00f6r\u00fcnt\u00fcle\">\n      <p style={{ fontWeight: 'bold', fontSize: '18px', margin: '0 0 10px 0', color: '#dc3545' }}>\n        Fiyat: {price} TL\n      <\/p>\n    <\/ProductCardWrapper>\n  );\n}\n\nexport default ProductCard;\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>ProductCardWrapper<\/code> asl\u0131nda <code>Card<\/code> bile\u015fenimizin stillerini devral\u0131yor ve \u00fczerine yeni stiller ekliyor. Ayr\u0131ca, <code>ProductCard<\/code> bile\u015feni <code>price<\/code> gibi kendine \u00f6zg\u00fc bir prop al\u0131yor ve <code>buttonText<\/code> i\u00e7in varsay\u0131lan bir de\u011fer belirliyor. Bunu <code>App.jsx<\/code> i\u00e7inde kullanabiliriz:<\/p>\n<pre><code>\n\/\/ App.jsx i\u00e7inde\nimport ProductCard from '.\/components\/ProductCard';\n\n\/\/ ...\n<ProductCard\n  imageSrc=\"https:\/\/via.placeholder.com\/300x200\/28a745\/FFFFFF\"\n  title=\"Organik Kahve \u00c7ekirdekleri\"\n  description=\"Taze kavrulmu\u015f, e\u015fsiz aromal\u0131 organik kahve \u00e7ekirdekleri.\"\n  price=\"85.50\"\n  onButtonClick={() => alert('\u00dcr\u00fcn sayfas\u0131na git!')}\n\/>\n\/\/ ...\n<\/pre>\n<p><\/code><\/p>\n<p>Bu teknik, ana kart bile\u015fenimizin temel i\u015flevselli\u011fini ve stillerini korurken, belirli kullan\u0131m senaryolar\u0131na y\u00f6nelik \u00f6zel kart varyantlar\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flar. Styled Components ile bu t\u00fcr kompozisyonlar, kodun daha mod\u00fcler ve anla\u015f\u0131l\u0131r olmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h3>Duyarl\u0131 Tasar\u0131m (Responsive Design) \u0130\u00e7in Media Query'ler<\/h3>\n<p>Web sitelerinin farkl\u0131 cihazlarda (mobil, tablet, masa\u00fcst\u00fc) iyi g\u00f6r\u00fcnmesi g\u00fcn\u00fcm\u00fczde bir zorunluluktur. Styled Components, CSS <code>media query<\/code>'lerini do\u011frudan stil tan\u0131mlar\u0131n\u0131z\u0131n i\u00e7ine yazman\u0131za izin vererek duyarl\u0131 tasar\u0131mlar\u0131 kolayca uygulaman\u0131z\u0131 sa\u011flar.<\/p>\n<p>Kart\u0131m\u0131z\u0131n geni\u015fli\u011fini ve di\u011fer \u00f6zelliklerini ekran boyutuna g\u00f6re de\u011fi\u015ftirelim:<\/p>\n<pre><code>\n\/\/ src\/components\/Card.jsx dosyas\u0131nda CardWrapper'\u0131 g\u00fcncelleyelim\nconst CardWrapper = styled.div<code>border: 1px solid ${props => props.theme.colors.borderColor};\n  border-radius: ${props => props.theme.borderRadius};\n  overflow: hidden;\n  box-shadow: ${props => props.theme.boxShadow};\n  width: 300px; \/* Masa\u00fcst\u00fc i\u00e7in varsay\u0131lan geni\u015flik *\/\n  margin: ${props => props.theme.spacing.medium};\n  background-color: ${props => props.theme.colors.cardBackground};\n  transition: transform 0.2s ease-in-out;\n\n  &:hover {\n    transform: translateY(-5px);\n  }\n\n  @media (max-width: 768px) { \/* Tablet ve alt\u0131 i\u00e7in *\/\n    width: 250px;\n    margin: ${props => props.theme.spacing.small};\n  }\n\n  @media (max-width: 480px) { \/* Mobil cihazlar i\u00e7in *\/\n    width: 90%; \/* Tam geni\u015flik veya yak\u0131n *\/\n    margin: ${props => props.theme.spacing.medium} auto; \/* Ortala *\/\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08); \/* Daha hafif g\u00f6lge *\/\n  }<\/code>;\n\nconst CardImage = styled.img<code>width: 100%;\n  height: 200px;\n\n  @media (max-width: 480px) {\n    height: 150px; \/* Mobil i\u00e7in daha k\u00fc\u00e7\u00fck resim y\u00fcksekli\u011fi *\/\n  }<\/code>;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u015fekilde, kart\u0131m\u0131z\u0131n farkl\u0131 ekran boyutlar\u0131nda nas\u0131l davranaca\u011f\u0131n\u0131 tek bir Styled Component tan\u0131m\u0131 i\u00e7inde y\u00f6netebiliriz. <code>media query<\/code>'ler do\u011frudan stil bloklar\u0131na dahil edildi\u011fi i\u00e7in, ilgili stilin hangi bile\u015fene ait oldu\u011funu ve hangi ko\u015fullarda uyguland\u0131\u011f\u0131n\u0131 anlamak \u00e7ok daha kolay hale gelir. Bu, \u00f6zellikle karma\u015f\u0131k ve duyarl\u0131 aray\u00fczler geli\u015ftirirken b\u00fcy\u00fck bir avantaj sa\u011flar. Geli\u015fmi\u015f bu teknikler, React ve Styled Components ile sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda estetik, bak\u0131m\u0131 kolay ve kullan\u0131c\u0131 dostu uygulamalar olu\u015fturmam\u0131z i\u00e7in bize gerekli ara\u00e7lar\u0131 sunar.<\/p>\n<h2>Sonu\u00e7: React Kart Bile\u015fenlerinde Yeniden Kullan\u0131labilirli\u011fin G\u00fcc\u00fc<\/h2>\n<p>Bu makalede, React ve Styled Components ikilisini kullanarak nas\u0131l yeniden kullan\u0131labilir kart bile\u015fenleri olu\u015fturabilece\u011fimizi en ba\u015ftan ele ald\u0131k. Geli\u015ftirme s\u00fcrecinde kod tekrar\u0131n\u0131n \u00f6n\u00fcne ge\u00e7mek, tasar\u0131m tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak ve bak\u0131m maliyetlerini d\u00fc\u015f\u00fcrmek gibi temel sorunlara \u00e7\u00f6z\u00fcm olarak yeniden kullan\u0131labilir bile\u015fenlerin \u00f6nemini vurgulad\u0131k. React'\u0131n bile\u015fen tabanl\u0131 mimarisinin dinamik UI'lar i\u00e7in nas\u0131l bir temel olu\u015fturdu\u011funu, Styled Components'\u0131n ise bu bile\u015fenlere nas\u0131l kapsaml\u0131, dinamik ve temal\u0131 stiller kazand\u0131rd\u0131\u011f\u0131n\u0131 detayl\u0131ca inceledik. Temel bir kart bile\u015feni olu\u015fturma ad\u0131mlar\u0131ndan, prop'lar arac\u0131l\u0131\u011f\u0131yla dinamik stil ve i\u00e7erik entegrasyonuna; tema y\u00f6netimi, bile\u015fen kal\u0131t\u0131m\u0131 ve duyarl\u0131 tasar\u0131m i\u00e7in <code>media query<\/code>'lerin kullan\u0131m\u0131na kadar pek \u00e7ok ileri d\u00fczey tekni\u011fi pratik \u00f6rneklerle uygulad\u0131k.<\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, Styled Components ile bir React kart\u0131 geli\u015ftirmek sadece estetik bir de\u011fer katmakla kalm\u0131yor, ayn\u0131 zamanda projenizin genel sa\u011fl\u0131\u011f\u0131na ve s\u00fcrd\u00fcr\u00fclebilirli\u011fine de \u00f6nemli katk\u0131lar sa\u011fl\u0131yor. Art\u0131k ayn\u0131 kart\u0131 farkl\u0131 i\u00e7eriklerle, farkl\u0131 varyasyonlarda ve farkl\u0131 ekran boyutlar\u0131nda sorunsuz bir \u015fekilde kullanabilirsiniz. Bu yakla\u015f\u0131m, sadece geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131rmakla kalmaz, ayn\u0131 zamanda bir tasar\u0131m sistemi olu\u015fturman\u0131n temellerini atarak ekibinizle daha uyumlu \u00e7al\u0131\u015fman\u0131za olanak tan\u0131r. Unutmay\u0131n, iyi tasarlanm\u0131\u015f ve yeniden kullan\u0131labilir bile\u015fenler, modern frontend geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n<h4>Styled Components kullanmak performans\u0131 etkiler mi?<\/h4>\n<p>Genel olarak, Styled Components modern taray\u0131c\u0131larda olduk\u00e7a performansl\u0131d\u0131r. \u00c7al\u0131\u015fma zaman\u0131nda stil olu\u015fturur ve bunlar\u0131 DOM'a enjekte eder. Baz\u0131 durumlarda k\u00fc\u00e7\u00fck bir ba\u015flang\u0131\u00e7 maliyeti olabilir (runtime overhead), ancak bu genellikle ihmal edilebilir d\u00fczeydedir. Sunucu taraf\u0131 render (SSR) veya statik site olu\u015fturma (SSG) ile birle\u015ftirildi\u011finde, bu maliyet daha da azal\u0131r. Performans\u0131 art\u0131rmak i\u00e7in memoization (<code>React.memo<\/code>) ve a\u015f\u0131r\u0131 prop ge\u00e7i\u015finden ka\u00e7\u0131nmak gibi genel React optimizasyonlar\u0131n\u0131 kullanabilirsiniz.<\/p>\n<\/li>\n<li>\n<h4>Farkl\u0131 CSS-in-JS k\u00fct\u00fcphaneleri aras\u0131nda ne fark var?<\/h4>\n<p>Styled Components gibi pop\u00fcler CSS-in-JS k\u00fct\u00fcphaneleri aras\u0131nda (\u00f6rne\u011fin Emotion, Radium, JSS) baz\u0131 temel farkl\u0131l\u0131klar bulunur. Styled Components, \"component-first\" yakla\u015f\u0131m\u0131n\u0131 benimser ve React bile\u015fenlerinizi do\u011frudan stilize etmenizi sa\u011flar. Emotion, Styled Components'a \u00e7ok benzer ancak genellikle daha k\u00fc\u00e7\u00fck boyutlu ve baz\u0131 durumlarda daha performansl\u0131 kabul edilir. Di\u011ferleri ise daha farkl\u0131 API'ler veya \u00f6zellikler sunar. Se\u00e7im genellikle ki\u015fisel tercihe, projenin ihtiya\u00e7lar\u0131na ve ekibin a\u015final\u0131\u011f\u0131na ba\u011fl\u0131d\u0131r. Styled Components, g\u00fc\u00e7l\u00fc theming ve sezgisel API'si sayesinde geni\u015f bir geli\u015ftirici kitlesi taraf\u0131ndan tercih edilir.<\/p>\n<\/li>\n<li>\n<h4>Card bile\u015fenini nas\u0131l test edebilirim?<\/h4>\n<p>React bile\u015fenlerini test etmek i\u00e7in yayg\u0131n olarak React Testing Library veya Jest gibi ara\u00e7lar kullan\u0131l\u0131r. Styled Components ile yaz\u0131lm\u0131\u015f bile\u015fenleri test ederken, snapshot testleri (bile\u015fenin HTML \u00e7\u0131kt\u0131s\u0131n\u0131n anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc al\u0131r) veya <code>render<\/code> metotlar\u0131n\u0131 kullanarak DOM'da belirli elementlerin veya stillerin varl\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz. \u00d6rne\u011fin, bir <code>CardButton<\/code> bile\u015feninin <code>primary<\/code> prop'una g\u00f6re do\u011fru arkaplan rengine sahip olup olmad\u0131\u011f\u0131n\u0131 test edebilirsiniz.<\/p>\n<\/li>\n<li>\n<h4>Styled Components ile global CSS'i nas\u0131l y\u00f6netirim?<\/h4>\n<p>Styled Components, k\u00fcresel stilleri y\u00f6netmek i\u00e7in <code>createGlobalStyle<\/code> yard\u0131mc\u0131 fonksiyonunu sunar. Bu fonksiyon, uygulaman\u0131z\u0131n tamam\u0131na uygulanacak global stilleri tan\u0131mlaman\u0131z\u0131 sa\u011flar. \u00d6rne\u011fin, <code>body<\/code> veya <code>html<\/code> etiketlerine stil vermek, CSS s\u0131f\u0131rlama (reset) uygulamak veya genel fontlar\u0131 ayarlamak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r. <code>createGlobalStyle<\/code> ile tan\u0131mlanan stiller, t\u00fcm Styled Components'lar\u0131n stil kapsam\u0131n\u0131n d\u0131\u015f\u0131ndad\u0131r ve uygulaman\u0131n en \u00fcst seviyesine enjekte edilir.<\/p>\n<\/li>\n<li>\n<h4>Prop drilling'i (prop sarmal\u0131n\u0131) nas\u0131l \u00f6nleyebilirim?<\/h4>\n<p>Prop drilling, bir bile\u015fenin, alt bile\u015fenlerine aktaraca\u011f\u0131 prop'lar\u0131 kendi i\u00e7inde kullanmadan sadece iletmesi durumudur. Bu durum, \u00f6zellikle \u00e7ok katmanl\u0131 bile\u015fen hiyerar\u015filerinde kod okunabilirli\u011fini ve bak\u0131m\u0131n\u0131 zorla\u015ft\u0131r\u0131r. Styled Components \u00f6zelinde tema y\u00f6netimi, prop drilling'i azaltman\u0131n harika bir yoludur \u00e7\u00fcnk\u00fc tema nesnesi <code>ThemeProvider<\/code> arac\u0131l\u0131\u011f\u0131yla hiyerar\u015finin herhangi bir seviyesindeki t\u00fcm Styled Components'lara eri\u015filebilir hale gelir. Di\u011fer genel React teknikleri aras\u0131nda React Context API, Redux veya Zustand gibi durum y\u00f6netimi k\u00fct\u00fcphaneleri ve bile\u015fen kompozisyonu (children prop'u ile i\u00e7eri\u011fi ge\u00e7irme) bulunur.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, kullan\u0131c\u0131 aray\u00fczleri giderek daha karma\u015f\u0131k ve dinamik hale geliyor. Bir frontend geli\u015ftiricisi olarak, s\u0131k&hellip;","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-31412","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>Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma<\/title>\n<meta name=\"description\" content=\"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, kullan\u0131c\u0131 aray\u00fczleri giderek daha karma\u015f\u0131k ve dinamik hale geliyor. Bir frontend geli\u015ftiricisi olarak, s\u0131k s\u0131k tekrar eden ve farkl\u0131 i\u00e7eriklerle yeniden \u015fekillenen UI elemanlar\u0131 olu\u015fturma ihtiyac\u0131 duyar\u0131z. \u0130\u015fte bu noktada React kart bile\u015fenleri devreye giriyor. Peki, bu kartlar\u0131 her seferinde s\u0131f\u0131rdan yazmak yerine, Styled Components&#039;\u0131n g\u00fcc\u00fcn\u00fc kullanarak nas\u0131l hem esnek hem de bak\u0131m\u0131 kolay, yeniden kullan\u0131labilir yap\u0131lar kurabiliriz? Bu makale, tasar\u0131m tutarl\u0131l\u0131\u011f\u0131n\u0131 ve geli\u015ftirme verimlili\u011fini art\u0131ran bu konuyu en ba\u015ftan ele alarak, ad\u0131m ad\u0131m pratik uygulamalarla size rehberlik edecek.\" \/>\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\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, kullan\u0131c\u0131 aray\u00fczleri giderek daha karma\u015f\u0131k ve dinamik hale geliyor. Bir frontend geli\u015ftiricisi olarak, s\u0131k s\u0131k tekrar eden ve farkl\u0131 i\u00e7eriklerle yeniden \u015fekillenen UI elemanlar\u0131 olu\u015fturma ihtiyac\u0131 duyar\u0131z. \u0130\u015fte bu noktada React kart bile\u015fenleri devreye giriyor. Peki, bu kartlar\u0131 her seferinde s\u0131f\u0131rdan yazmak yerine, Styled Components&#039;\u0131n g\u00fcc\u00fcn\u00fc kullanarak nas\u0131l hem esnek hem de bak\u0131m\u0131 kolay, yeniden kullan\u0131labilir yap\u0131lar kurabiliriz? Bu makale, tasar\u0131m tutarl\u0131l\u0131\u011f\u0131n\u0131 ve geli\u015ftirme verimlili\u011fini art\u0131ran bu konuyu en ba\u015ftan ele alarak, ad\u0131m ad\u0131m pratik uygulamalarla size rehberlik edecek.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-09T15:01:52+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma\",\"datePublished\":\"2025-10-09T15:01:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/\"},\"wordCount\":3982,\"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\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/\",\"name\":\"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-09T15:01:52+00:00\",\"description\":\"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, kullan\u0131c\u0131 aray\u00fczleri giderek daha karma\u015f\u0131k ve dinamik hale geliyor. Bir frontend geli\u015ftiricisi olarak, s\u0131k s\u0131k tekrar eden ve farkl\u0131 i\u00e7eriklerle yeniden \u015fekillenen UI elemanlar\u0131 olu\u015fturma ihtiyac\u0131 duyar\u0131z. \u0130\u015fte bu noktada React kart bile\u015fenleri devreye giriyor. Peki, bu kartlar\u0131 her seferinde s\u0131f\u0131rdan yazmak yerine, Styled Components'\u0131n g\u00fcc\u00fcn\u00fc kullanarak nas\u0131l hem esnek hem de bak\u0131m\u0131 kolay, yeniden kullan\u0131labilir yap\u0131lar kurabiliriz? Bu makale, tasar\u0131m tutarl\u0131l\u0131\u011f\u0131n\u0131 ve geli\u015ftirme verimlili\u011fini art\u0131ran bu konuyu en ba\u015ftan ele alarak, ad\u0131m ad\u0131m pratik uygulamalarla size rehberlik edecek.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma\"}]},{\"@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":"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma","description":"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, kullan\u0131c\u0131 aray\u00fczleri giderek daha karma\u015f\u0131k ve dinamik hale geliyor. Bir frontend geli\u015ftiricisi olarak, s\u0131k s\u0131k tekrar eden ve farkl\u0131 i\u00e7eriklerle yeniden \u015fekillenen UI elemanlar\u0131 olu\u015fturma ihtiyac\u0131 duyar\u0131z. \u0130\u015fte bu noktada React kart bile\u015fenleri devreye giriyor. Peki, bu kartlar\u0131 her seferinde s\u0131f\u0131rdan yazmak yerine, Styled Components'\u0131n g\u00fcc\u00fcn\u00fc kullanarak nas\u0131l hem esnek hem de bak\u0131m\u0131 kolay, yeniden kullan\u0131labilir yap\u0131lar kurabiliriz? Bu makale, tasar\u0131m tutarl\u0131l\u0131\u011f\u0131n\u0131 ve geli\u015ftirme verimlili\u011fini art\u0131ran bu konuyu en ba\u015ftan ele alarak, ad\u0131m ad\u0131m pratik uygulamalarla size rehberlik edecek.","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\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma","og_description":"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, kullan\u0131c\u0131 aray\u00fczleri giderek daha karma\u015f\u0131k ve dinamik hale geliyor. Bir frontend geli\u015ftiricisi olarak, s\u0131k s\u0131k tekrar eden ve farkl\u0131 i\u00e7eriklerle yeniden \u015fekillenen UI elemanlar\u0131 olu\u015fturma ihtiyac\u0131 duyar\u0131z. \u0130\u015fte bu noktada React kart bile\u015fenleri devreye giriyor. Peki, bu kartlar\u0131 her seferinde s\u0131f\u0131rdan yazmak yerine, Styled Components'\u0131n g\u00fcc\u00fcn\u00fc kullanarak nas\u0131l hem esnek hem de bak\u0131m\u0131 kolay, yeniden kullan\u0131labilir yap\u0131lar kurabiliriz? Bu makale, tasar\u0131m tutarl\u0131l\u0131\u011f\u0131n\u0131 ve geli\u015ftirme verimlili\u011fini art\u0131ran bu konuyu en ba\u015ftan ele alarak, ad\u0131m ad\u0131m pratik uygulamalarla size rehberlik edecek.","og_url":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-09T15:01:52+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma","datePublished":"2025-10-09T15:01:52+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/"},"wordCount":3982,"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\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/","name":"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-09T15:01:52+00:00","description":"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, kullan\u0131c\u0131 aray\u00fczleri giderek daha karma\u015f\u0131k ve dinamik hale geliyor. Bir frontend geli\u015ftiricisi olarak, s\u0131k s\u0131k tekrar eden ve farkl\u0131 i\u00e7eriklerle yeniden \u015fekillenen UI elemanlar\u0131 olu\u015fturma ihtiyac\u0131 duyar\u0131z. \u0130\u015fte bu noktada React kart bile\u015fenleri devreye giriyor. Peki, bu kartlar\u0131 her seferinde s\u0131f\u0131rdan yazmak yerine, Styled Components'\u0131n g\u00fcc\u00fcn\u00fc kullanarak nas\u0131l hem esnek hem de bak\u0131m\u0131 kolay, yeniden kullan\u0131labilir yap\u0131lar kurabiliriz? Bu makale, tasar\u0131m tutarl\u0131l\u0131\u011f\u0131n\u0131 ve geli\u015ftirme verimlili\u011fini art\u0131ran bu konuyu en ba\u015ftan ele alarak, ad\u0131m ad\u0131m pratik uygulamalarla size rehberlik edecek.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/styled-components-ile-yeniden-kullanilabilir-react-kart-bilesenleri-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Styled Components ile Yeniden Kullan\u0131labilir React Kart Bile\u015fenleri Olu\u015fturma"}]},{"@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\/31412","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=31412"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31412\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}