{"id":38491,"date":"2026-02-01T12:00:44","date_gmt":"2026-02-01T09:00:44","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/"},"modified":"2026-02-01T12:00:44","modified_gmt":"2026-02-01T09:00:44","slug":"electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/","title":{"rendered":"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog"},"content":{"rendered":"<h2>Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog<\/h2>\n<p>Electron uygulamalar\u0131, modern masa\u00fcst\u00fc uygulamalar\u0131n\u0131n g\u00fcc\u00fcn\u00fc web teknolojilerinin esnekli\u011fiyle birle\u015ftirerek geli\u015ftiricilere benzersiz imkanlar sunar. Bir Electron uygulamas\u0131nda React gibi bir \u00f6n y\u00fcz k\u00fct\u00fcphanesi kullan\u0131ld\u0131\u011f\u0131nda, uygulaman\u0131n ana (main) s\u00fcreci ile React tabanl\u0131 olu\u015fturucu (renderer) s\u00fcreci aras\u0131nda g\u00fcvenli ve verimli bir \u015fekilde veri al\u0131\u015fveri\u015fi yapmak, uygulaman\u0131n performans\u0131 ve g\u00fcvenli\u011fi a\u00e7\u0131s\u0131ndan kritik bir \u00f6neme sahiptir. Bu devlog yaz\u0131s\u0131nda, bu iki farkl\u0131 ancak birbiriyle entegre d\u00fcnyan\u0131n nas\u0131l g\u00fcvenli ve etkili bir \u015fekilde ileti\u015fim kurdu\u011funu, temel y\u00f6ntemlerden geli\u015fmi\u015f senaryolara kadar detayl\u0131ca inceleyece\u011fiz.<\/p>\n<h3>1. Electron ve React Mimarisi: Temelleri Anlamak<\/h3>\n<p>Electron uygulamalar\u0131, Node.js ve Chromium&#8217;un birle\u015fimiyle \u00e7al\u0131\u015f\u0131r. Bu yap\u0131, uygulaman\u0131n farkl\u0131 yeteneklere sahip iki ana s\u00fcre\u00e7te i\u015flemesini gerektirir. Veri al\u0131\u015fveri\u015finin nas\u0131l yap\u0131laca\u011f\u0131n\u0131 anlamak i\u00e7in bu s\u00fcre\u00e7lerin rollerini iyi kavramak \u00f6nemlidir.<\/p>\n<h4>Ana S\u00fcre\u00e7 (Main Process) Nedir?<\/h4>\n<p>Ana s\u00fcre\u00e7, Electron uygulamas\u0131n\u0131n ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r ve Node.js ortam\u0131nda \u00e7al\u0131\u015f\u0131r. \u0130\u015fletim sistemiyle do\u011frudan etkile\u015fime girebilen tek s\u00fcre\u00e7tir. Dosya sistemi eri\u015fimi, veritaban\u0131 ba\u011flant\u0131lar\u0131, sistem bildirimleri, men\u00fc y\u00f6netimi ve pencere olu\u015fturma gibi t\u00fcm sistem d\u00fczeyindeki i\u015flemler ana s\u00fcre\u00e7 taraf\u0131ndan y\u00fcr\u00fct\u00fcl\u00fcr. Her Electron uygulamas\u0131nda yaln\u0131zca bir ana s\u00fcre\u00e7 bulunur.<\/p>\n<h4>Olu\u015fturucu S\u00fcre\u00e7 (Renderer Process) Nedir?<\/h4>\n<p>Olu\u015fturucu s\u00fcre\u00e7ler, web taray\u0131c\u0131lar\u0131nda \u00e7al\u0131\u015fan sekmeler gibidir. Her bir Electron penceresi kendi olu\u015fturucu s\u00fcrecinde \u00e7al\u0131\u015f\u0131r ve Chromium tabanl\u0131 bir ortam sa\u011flar. React, Vue veya Angular gibi \u00f6n y\u00fcz k\u00fct\u00fcphaneleri bu s\u00fcre\u00e7lerde \u00e7al\u0131\u015f\u0131r ve kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc (UI) olu\u015fturur. Olu\u015fturucu s\u00fcre\u00e7ler, do\u011frudan i\u015fletim sistemi kaynaklar\u0131na eri\u015femezler; bu t\u00fcr i\u015flemler i\u00e7in ana s\u00fcre\u00e7 ile ileti\u015fim kurmalar\u0131 gerekir.<\/p>\n<h4>S\u00fcre\u00e7ler Aras\u0131 \u0130leti\u015fim (IPC) Neden Gerekli?<\/h4>\n<p>Ana s\u00fcre\u00e7 ve olu\u015fturucu s\u00fcre\u00e7lerin farkl\u0131 yeteneklere sahip olmas\u0131, aralar\u0131nda bir ileti\u015fim k\u00f6pr\u00fcs\u00fc kurulmas\u0131n\u0131 zorunlu k\u0131lar. \u00d6rne\u011fin, React tabanl\u0131 bir kullan\u0131c\u0131 aray\u00fcz\u00fc, bir dosya a\u00e7ma d\u00fc\u011fmesine bas\u0131ld\u0131\u011f\u0131nda dosya sistemine eri\u015fmek i\u00e7in ana s\u00fcre\u00e7ten yard\u0131m istemelidir. Bu iki s\u00fcre\u00e7 aras\u0131ndaki ileti\u015fim, Electron&#8217;\u0131n S\u00fcre\u00e7ler Aras\u0131 \u0130leti\u015fim (Inter-Process Communication &#8211; IPC) mod\u00fcl\u00fc arac\u0131l\u0131\u011f\u0131yla sa\u011flan\u0131r. IPC, ana ve olu\u015fturucu s\u00fcre\u00e7lerin birbirlerine mesaj g\u00f6ndermesine ve yan\u0131t almas\u0131na olanak tan\u0131r.<\/p>\n<h3>2. Veri Al\u0131\u015fveri\u015fi Neden Karma\u015f\u0131k? G\u00fcvenlik ve Performans<\/h3>\n<p>IPC, Electron uygulamalar\u0131n\u0131n temel bir bile\u015feni olsa da, bu ileti\u015fim modelini do\u011fru bir \u015fekilde uygulamak, \u00f6zellikle g\u00fcvenlik ve performans a\u00e7\u0131s\u0131ndan baz\u0131 zorluklar\u0131 beraberinde getirir.<\/p>\n<h4>G\u00fcvenlik Endi\u015feleri ve Ba\u011flam \u0130zolasyonu (Context Isolation)<\/h4>\n<p>Electron uygulamalar\u0131, web teknolojilerini kulland\u0131\u011f\u0131 i\u00e7in web uygulamalar\u0131na \u00f6zg\u00fc g\u00fcvenlik risklerini de ta\u015f\u0131r. \u00d6zellikle olu\u015fturucu s\u00fcrecinde \u00e7al\u0131\u015fan web i\u00e7eri\u011fi, k\u00f6t\u00fc niyetli kodlar (XSS sald\u0131r\u0131lar\u0131) arac\u0131l\u0131\u011f\u0131yla ana s\u00fcre\u00e7teki Node.js API&#8217;lerine veya Electron mod\u00fcllerine eri\u015fmeye \u00e7al\u0131\u015fabilir. Bu t\u00fcr sald\u0131r\u0131lar\u0131 \u00f6nlemek i\u00e7in Electron, &#8220;Ba\u011flam \u0130zolasyonu&#8221; (Context Isolation) \u00f6zelli\u011fini sunar. Ba\u011flam izolasyonu etkinle\u015ftirildi\u011finde, olu\u015fturucu s\u00fcrecinin JavaScript kodu ile Electron&#8217;\u0131n dahili API&#8217;leri ve preload script&#8217;leri aras\u0131nda ayr\u0131 bir JavaScript ba\u011flam\u0131 olu\u015fturulur. Bu, web i\u00e7eri\u011finin do\u011frudan Electron API&#8217;lerine veya preload script&#8217;ine eri\u015fmesini engeller ve g\u00fcvenli\u011fi art\u0131r\u0131r.<\/p>\n<h4>Performans Etkileri ve B\u00fcy\u00fck Veri Transferi<\/h4>\n<p>IPC \u00fczerinden veri al\u0131\u015fveri\u015fi yaparken, verinin serile\u015ftirilmesi (g\u00f6nderen tarafta) ve seri olmaktan \u00e7\u0131kar\u0131lmas\u0131 (al\u0131c\u0131 tarafta) gibi ek maliyetler olu\u015fur. \u00d6zellikle b\u00fcy\u00fck veri k\u00fcmeleri veya s\u0131k mesajla\u015fma durumlar\u0131nda bu i\u015flemler performans darbo\u011fazlar\u0131na yol a\u00e7abilir. Bu nedenle, IPC mesaj y\u00fck\u00fcn\u00fc minimumda tutmak ve yaln\u0131zca gerekli veriyi g\u00f6ndermek \u00f6nemlidir.<\/p>\n<h4>Asenkron \u0130leti\u015fimin \u00d6nemi<\/h4>\n<p>IPC ileti\u015fimi genellikle asenkrondur. Senkron IPC \u00e7a\u011fr\u0131lar\u0131, ana s\u00fcreci veya olu\u015fturucu s\u00fcrecini bloke ederek uygulaman\u0131n donmas\u0131na neden olabilir. Bu nedenle, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcn duyarl\u0131l\u0131\u011f\u0131n\u0131 korumak i\u00e7in asenkron ileti\u015fim y\u00f6ntemlerini tercih etmek ve uzun s\u00fcren i\u015flemleri ana s\u00fcre\u00e7te ayr\u0131 bir i\u015f par\u00e7ac\u0131\u011f\u0131nda (worker thread) y\u00fcr\u00fctmek en iyi uygulamad\u0131r.<\/p>\n<h3>3. Temel \u0130leti\u015fim Y\u00f6ntemleri: <code>ipcMain<\/code> ve <code>ipcRenderer<\/code><\/h3>\n<p>Electron, ana ve olu\u015fturucu s\u00fcre\u00e7ler aras\u0131nda mesajla\u015fmay\u0131 sa\u011flamak i\u00e7in <code>ipcMain<\/code> ve <code>ipcRenderer<\/code> mod\u00fcllerini kullan\u0131r. Bu mod\u00fcller, olay tabanl\u0131 bir mimariyle \u00e7al\u0131\u015f\u0131r.<\/p>\n<h4>Renderer&#8217;dan Main&#8217;e Tek Y\u00f6nl\u00fc \u0130leti\u015fim (<code>ipcRenderer.send<\/code>)<\/h4>\n<p>Olu\u015fturucu s\u00fcrecinden ana s\u00fcrece tek y\u00f6nl\u00fc bir mesaj g\u00f6ndermek i\u00e7in <code>ipcRenderer.send()<\/code> metodu kullan\u0131l\u0131r. Bu, bir olay\u0131 tetiklemek veya ana s\u00fcre\u00e7te bir i\u015flem ba\u015flatmak i\u00e7in idealdir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Renderer S\u00fcrecinde (React bile\u015feni i\u00e7inde veya preload script'te)\n\/\/ \u00d6rne\u011fin, bir butona t\u0131klan\u0131nca ana s\u00fcrece mesaj g\u00f6nderme\ndocument.getElementById('myButton').addEventListener('click', () => {\n  window.electronAPI.send('asynchronous-message', 'Merhaba Ana S\u00fcre\u00e7!');\n});<\/pre>\n<p><\/code><\/p>\n<p>Ana s\u00fcre\u00e7te bu mesaj\u0131 dinlemek i\u00e7in <code>ipcMain.on()<\/code> metodu kullan\u0131l\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ana S\u00fcre\u00e7te (main.js)\nconst { ipcMain } = require('electron');\n\nipcMain.on('asynchronous-message', (event, arg) => {\n  console.log(arg); \/\/ \u00c7\u0131kt\u0131: Merhaba Ana S\u00fcre\u00e7!\n  \/\/ Ana s\u00fcre\u00e7ten olu\u015fturucuya geri mesaj g\u00f6ndermek i\u00e7in\n  event.sender.send('asynchronous-reply', 'Mesaj\u0131n\u0131 ald\u0131m!');\n});<\/pre>\n<p><\/code><\/p>\n<h4>Main'den Renderer'a Tek Y\u00f6nl\u00fc \u0130leti\u015fim (<code>webContents.send<\/code>)<\/h4>\n<p>Ana s\u00fcre\u00e7ten olu\u015fturucu s\u00fcrece mesaj g\u00f6ndermek i\u00e7in <code>BrowserWindow<\/code> nesnesinin <code>webContents.send()<\/code> metodu kullan\u0131l\u0131r. Bu, ana s\u00fcre\u00e7te ger\u00e7ekle\u015fen bir olay\u0131 (\u00f6rne\u011fin, bir dosya indirme tamamland\u0131\u011f\u0131nda) olu\u015fturucuya bildirmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ana S\u00fcre\u00e7te (main.js)\nconst { BrowserWindow } = require('electron');\n\nlet mainWindow; \/\/ Uygulaman\u0131n ana penceresi\n\nfunction createWindow() {\n  mainWindow = new BrowserWindow({ \/* ... *\/ });\n  \/\/ ...\n}\n\n\/\/ Bir s\u00fcre sonra veya bir olay \u00fczerine\nsetTimeout(() => {\n  if (mainWindow) {\n    mainWindow.webContents.send('update-ui', { status: 'Ba\u015far\u0131l\u0131', data: 'Yeni veriler' });\n  }\n}, 3000);<\/pre>\n<p><\/code><\/p>\n<p>Olu\u015fturucu s\u00fcrecinde bu mesaj\u0131 dinlemek i\u00e7in <code>ipcRenderer.on()<\/code> metodu kullan\u0131l\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Renderer S\u00fcrecinde (preload script veya React bile\u015feni i\u00e7inde)\nwindow.electronAPI.on('update-ui', (data) => {\n  console.log('UI G\u00fcncellemesi:', data); \/\/ \u00c7\u0131kt\u0131: UI G\u00fcncellemesi: { status: 'Ba\u015far\u0131l\u0131', data: 'Yeni veriler' }\n  \/\/ React state'ini g\u00fcncelleme veya UI elementlerini de\u011fi\u015ftirme\n});<\/pre>\n<p><\/code><\/p>\n<h4>\u0130ki Y\u00f6nl\u00fc \u0130leti\u015fim ve Yan\u0131t Bekleme (<code>ipcRenderer.invoke<\/code> \/ <code>ipcMain.handle<\/code>)<\/h4>\n<p>Electron 9'dan itibaren tan\u0131t\u0131lan <code>ipcRenderer.invoke()<\/code> ve <code>ipcMain.handle()<\/code> metodlar\u0131, olu\u015fturucu s\u00fcrecinden ana s\u00fcrece bir fonksiyon \u00e7a\u011fr\u0131s\u0131 yap\u0131p bir yan\u0131t beklemek i\u00e7in modern ve daha g\u00fcvenli bir yol sunar. Bu, bir API \u00e7a\u011fr\u0131s\u0131 yapar gibi \u00e7al\u0131\u015f\u0131r ve <code>Promise<\/code> tabanl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ana S\u00fcre\u00e7te (main.js)\nipcMain.handle('get-app-version', async (event) => {\n  return '1.0.0'; \/\/ Uygulaman\u0131n versiyonunu d\u00f6nd\u00fcr\n});\n\nipcMain.handle('read-file-content', async (event, filePath) => {\n  const fs = require('fs').promises;\n  try {\n    const content = await fs.readFile(filePath, 'utf8');\n    return content;\n  } catch (error) {\n    console.error('Dosya okuma hatas\u0131:', error);\n    throw new Error('Dosya okunamad\u0131.');\n  }\n});<\/pre>\n<p><\/code><\/p>\n<p>Olu\u015fturucu s\u00fcrecinde bu metodlar\u0131 \u00e7a\u011f\u0131rmak i\u00e7in:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Renderer S\u00fcrecinde (React bile\u015feni i\u00e7inde)\nasync function fetchAppVersion() {\n  try {\n    const version = await window.electronAPI.invoke('get-app-version');\n    console.log('Uygulama Versiyonu:', version); \/\/ \u00c7\u0131kt\u0131: Uygulama Versiyonu: 1.0.0\n  } catch (error) {\n    console.error('Versiyon al\u0131namad\u0131:', error);\n  }\n}\n\nasync function readFile() {\n  try {\n    const filePath = '\/path\/to\/your\/file.txt'; \/\/ \u00d6rnek dosya yolu\n    const content = await window.electronAPI.invoke('read-file-content', filePath);\n    console.log('Dosya \u0130\u00e7eri\u011fi:', content);\n  } catch (error) {\n    console.error('Dosya okuma hatas\u0131:', error.error);\n  }\n}<\/pre>\n<p><\/code><\/p>\n<h3>4. Geli\u015fmi\u015f \u0130leti\u015fim Modelleri: Preload Scriptleri ve Context Isolation<\/h3>\n<p>G\u00fcvenli ve y\u00f6netilebilir bir ileti\u015fim kanal\u0131 olu\u015fturmak i\u00e7in preload script'leri ve <code>contextBridge<\/code> API'si vazge\u00e7ilmezdir.<\/p>\n<h4>Preload Scriptlerinin Rol\u00fc<\/h4>\n<p>Preload script'i, olu\u015fturucu s\u00fcreci y\u00fcklenmeden \u00f6nce \u00e7al\u0131\u015ft\u0131r\u0131lan bir JavaScript dosyas\u0131d\u0131r. Bu script, Node.js ortam\u0131nda \u00e7al\u0131\u015f\u0131r ve hem Node.js API'lerine hem de Electron API'lerine eri\u015febilir. Ayn\u0131 zamanda, <code>window<\/code> objesi arac\u0131l\u0131\u011f\u0131yla olu\u015fturucu s\u00fcrecinin global kapsam\u0131na da eri\u015febilir. Preload script'lerinin temel amac\u0131, olu\u015fturucu s\u00fcrecine g\u00fcvenli bir \u015fekilde Electron API'leri veya Node.js mod\u00fcllerinden t\u00fcretilmi\u015f i\u015flevler sa\u011flamakt\u0131r.<\/p>\n<h4>Context Isolation ile G\u00fcvenli API Maruziyeti<\/h4>\n<p><code>contextBridge<\/code> API'si, preload script'leri ile birlikte kullan\u0131ld\u0131\u011f\u0131nda, olu\u015fturucu s\u00fcrecine belirli i\u015flevleri g\u00fcvenli bir \u015fekilde if\u015fa etmenin anahtar\u0131d\u0131r. <code>contextBridge.exposeInMainWorld()<\/code> metodu, preload script'inde tan\u0131mlanan bir objeyi veya fonksiyonu, olu\u015fturucu s\u00fcrecinin <code>window<\/code> objesine ekler, ancak bunu ayr\u0131 bir ba\u011flamda yapar. Bu, olu\u015fturucu s\u00fcrecindeki k\u00f6t\u00fc niyetli kodun, ana s\u00fcre\u00e7 API'lerine do\u011frudan eri\u015fmesini veya preload script'ini manip\u00fcle etmesini engeller.<\/p>\n<p><strong><code>preload.js<\/code> \u00f6rne\u011fi:<\/strong><\/p>\n<pre><code class=\"language-javascript\">const { contextBridge, ipcRenderer } = require('electron');\n\ncontextBridge.exposeInMainWorld('electronAPI', {\n  send: (channel, data) => {\n    \/\/ Sadece izin verilen kanallar\u0131 g\u00f6nder\n    let validChannels = ['asynchronous-message'];\n    if (validChannels.includes(channel)) {\n      ipcRenderer.send(channel, data);\n    }\n  },\n  invoke: (channel, data) => {\n    \/\/ Sadece izin verilen kanallar\u0131 \u00e7a\u011f\u0131r\n    let validChannels = ['get-app-version', 'read-file-content'];\n    if (validChannels.includes(channel)) {\n      return ipcRenderer.invoke(channel, data);\n    }\n  },\n  on: (channel, func) => {\n    \/\/ Sadece izin verilen kanallar\u0131 dinle\n    let validChannels = ['update-ui', 'asynchronous-reply'];\n    if (validChannels.includes(channel)) {\n      \/\/ ipcRenderer.on'dan gelen olay objesini d\u0131\u015far\u0131 s\u0131zd\u0131rmamak i\u00e7in\n      const subscription = (event, ...args) => func(...args);\n      ipcRenderer.on(channel, subscription);\n      return () => ipcRenderer.removeListener(channel, subscription);\n    }\n  }\n});<\/pre>\n<p><\/code><\/p>\n<p><strong>React (Olu\u015fturucu) taraf\u0131nda kullan\u0131m:<\/strong><\/p>\n<pre><code class=\"language-javascript\">import React, { useEffect, useState } from 'react';\n\nfunction App() {\n  const [version, setVersion] = useState('');\n  const [messageFromMain, setMessageFromMain] = useState('');\n\n  useEffect(() => {\n    \/\/ Ana s\u00fcre\u00e7ten gelen mesajlar\u0131 dinle\n    window.electronAPI.on('asynchronous-reply', (message) => {\n      setMessageFromMain(message);\n    });\n\n    \/\/ Ana s\u00fcre\u00e7ten uygulama versiyonunu al\n    window.electronAPI.invoke('get-app-version').then(v => {\n      setVersion(v);\n    });\n\n    return () => {\n      \/\/ Temizleme i\u015flemi (event listener'\u0131 kald\u0131r)\n      \/\/ window.electronAPI.removeListener('asynchronous-reply', handler); \/\/ exposeInMainWorld i\u00e7indeki on metodu bunu y\u00f6netmeli\n    };\n  }, []);\n\n  const sendMessageToMain = () => {\n    window.electronAPI.send('asynchronous-message', 'React\\'tan selamlar!');\n  };\n\n  return (\n    <div>\n      <h1>Electron React Uygulamas\u0131<\/h1>\n      <p>Uygulama Versiyonu: {version}<\/p>\n      <button onClick={sendMessageToMain}>Ana S\u00fcrece Mesaj G\u00f6nder<\/button>\n      <p>Ana S\u00fcre\u00e7ten Gelen Mesaj: {messageFromMain}<\/p>\n    <\/div>\n  );\n}\n\nexport default App;<\/pre>\n<p><\/code><\/p>\n<h4>T\u00fcr G\u00fcvenli\u011fi i\u00e7in TypeScript Kullan\u0131m\u0131<\/h4>\n<p>B\u00fcy\u00fck projelerde, <code>contextBridge<\/code> arac\u0131l\u0131\u011f\u0131yla if\u015fa edilen API'lerin t\u00fcr g\u00fcvenli\u011fini sa\u011flamak i\u00e7in TypeScript kullanmak olduk\u00e7a faydal\u0131d\u0131r. Bir <code>electronAPI.d.ts<\/code> dosyas\u0131 olu\u015fturarak, React taraf\u0131nda <code>window.electronAPI<\/code> objesinin hangi metodlar\u0131 ve parametreleri kabul etti\u011fini tan\u0131mlayabilirsiniz.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/electronAPI.d.ts\ndeclare global {\n  interface Window {\n    electronAPI: {\n      send: (channel: string, data: any) => void;\n      invoke: (channel: string, data?: any) => Promise<any>;\n      on: (channel: string, func: (...args: any[]) => void) => () => void;\n    };\n  }\n}\nexport {};<\/pre>\n<p><\/code><br \/>\nBu sayede, React bile\u015fenlerinizde <code>window.electronAPI<\/code>'yi kullan\u0131rken otomatik tamamlama ve t\u00fcr kontrol\u00fc \u00f6zelliklerinden faydalanabilirsiniz.<\/p>\n<h3>5. Ger\u00e7ek Zamanl\u0131 Veri Ak\u0131\u015f\u0131 ve Durum Y\u00f6netimi<\/h3>\n<p>Electron uygulamalar\u0131nda, ana s\u00fcre\u00e7ten gelen verilerin React aray\u00fcz\u00fcnde an\u0131nda yans\u0131mas\u0131 veya React'teki kullan\u0131c\u0131 etkile\u015fimlerinin ana s\u00fcre\u00e7te kal\u0131c\u0131 hale getirilmesi s\u0131k kar\u015f\u0131la\u015f\u0131lan senaryolard\u0131r.<\/p>\n<h4>React Taraf\u0131nda Durum Y\u00f6netimi (Redux, Context API)<\/h4>\n<p>React uygulamas\u0131n\u0131n kendi i\u00e7indeki durumu y\u00f6netmek i\u00e7in Redux, Context API veya Recoil gibi k\u00fct\u00fcphaneler kullan\u0131labilir. Ana s\u00fcre\u00e7ten gelen veriler, bu durum y\u00f6netim sistemlerine entegre edilerek uygulaman\u0131n genel durumunu g\u00fcncelleyebilir. \u00d6rne\u011fin, ana s\u00fcre\u00e7ten gelen bir \"dosya kaydedildi\" mesaj\u0131, Redux store'daki bir eylemi tetikleyebilir ve bu da ilgili bile\u015fenin yeniden render edilmesini sa\u011flayabilir.<\/p>\n<h4>Electron ile Kal\u0131c\u0131 Veri ve Dosya Sistemine Eri\u015fim<\/h4>\n<p>Ana s\u00fcre\u00e7, Node.js'nin t\u00fcm yeteneklerine sahip oldu\u011fu i\u00e7in dosya sistemi (<code>fs<\/code> mod\u00fcl\u00fc), veritabanlar\u0131 (SQLite, NeDB) veya yerel depolama (<code>electron-store<\/code> gibi k\u00fct\u00fcphaneler) ile do\u011frudan etkile\u015fime girebilir. React taraf\u0131ndaki bir istek (\u00f6rne\u011fin, \"ayarlar\u0131 kaydet\"), preload script arac\u0131l\u0131\u011f\u0131yla ana s\u00fcrece iletilir ve ana s\u00fcre\u00e7 bu veriyi kal\u0131c\u0131 olarak depolar.<\/p>\n<p><strong><code>electron-store<\/code> ile kal\u0131c\u0131 depolama \u00f6rne\u011fi:<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ Ana S\u00fcre\u00e7te (main.js)\nconst Store = require('electron-store');\nconst store = new Store();\n\nipcMain.handle('set-setting', (event, key, value) => {\n  store.set(key, value);\n  return true;\n});\n\nipcMain.handle('get-setting', (event, key) => {\n  return store.get(key);\n});<\/pre>\n<p><\/code><\/p>\n<h4>Main S\u00fcrecinden Tetiklenen G\u00fcncellemeler<\/h4>\n<p>Baz\u0131 durumlarda, ana s\u00fcre\u00e7te ger\u00e7ekle\u015fen bir olay (\u00f6rne\u011fin, bir veritaban\u0131 de\u011fi\u015fikli\u011fi, bir a\u011f iste\u011finin tamamlanmas\u0131 veya bir zamanlay\u0131c\u0131n\u0131n tetiklenmesi) olu\u015fturucu s\u00fcrecindeki UI'nin g\u00fcncellenmesini gerektirebilir. Bu senaryolarda, ana s\u00fcre\u00e7 <code>mainWindow.webContents.send()<\/code> metodunu kullanarak olu\u015fturucu s\u00fcrece bir mesaj g\u00f6nderir. Olu\u015fturucu s\u00fcre\u00e7, <code>ipcRenderer.on()<\/code> ile bu mesaj\u0131 dinler ve React bile\u015fenlerinin durumunu g\u00fcncelleyerek UI'yi yeniden render eder.<\/p>\n<h3>6. Yayg\u0131n Senaryolar ve En \u0130yi Uygulamalar<\/h3>\n<p>Electron ve React aras\u0131nda veri al\u0131\u015fveri\u015fi yaparken s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan baz\u0131 senaryolar ve bu senaryolar i\u00e7in en iyi uygulamalar \u015funlard\u0131r:<\/p>\n<h4>Dosya \u0130\u015flemleri ve Sistem Diyaloglar\u0131<\/h4>\n<p>Kullan\u0131c\u0131n\u0131n bir dosya se\u00e7mesini veya bir dosyay\u0131 kaydetmesini gerektiren durumlarda, <code>dialog<\/code> mod\u00fcl\u00fc ana s\u00fcre\u00e7te kullan\u0131l\u0131r. React taraf\u0131ndaki bir buton t\u0131klamas\u0131, ana s\u00fcrece bir <code>invoke<\/code> \u00e7a\u011fr\u0131s\u0131 yapar. Ana s\u00fcre\u00e7, <code>dialog.showOpenDialog()<\/code> veya <code>dialog.showSaveDialog()<\/code> metodlar\u0131n\u0131 \u00e7a\u011f\u0131r\u0131r ve sonucu React'e geri d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ana S\u00fcre\u00e7te (main.js)\nconst { dialog } = require('electron');\n\nipcMain.handle('open-file-dialog', async (event) => {\n  const { canceled, filePaths } = await dialog.showOpenDialog({\n    properties: ['openFile']\n  });\n  if (canceled) {\n    return null;\n  } else {\n    return filePaths[0];\n  }\n});<\/pre>\n<p><\/code><\/p>\n<pre><code class=\"language-javascript\">\/\/ React Taraf\u0131nda\nasync function handleOpenFile() {\n  const filePath = await window.electronAPI.invoke('open-file-dialog');\n  if (filePath) {\n    console.log('Se\u00e7ilen Dosya:', filePath);\n    \/\/ Dosya i\u00e7eri\u011fini okumak i\u00e7in ba\u015fka bir IPC \u00e7a\u011fr\u0131s\u0131 yap\u0131labilir\n  }\n}<\/pre>\n<p><\/code><\/p>\n<h4>Uygulama Ayarlar\u0131 ve Kal\u0131c\u0131 Depolama<\/h4>\n<p>Kullan\u0131c\u0131 tercihlerini veya uygulama ayarlar\u0131n\u0131 kal\u0131c\u0131 olarak depolamak i\u00e7in <code>electron-store<\/code> gibi bir k\u00fct\u00fcphane ana s\u00fcre\u00e7te kullan\u0131labilir. React, bu ayarlara eri\u015fmek veya bunlar\u0131 g\u00fcncellemek i\u00e7in <code>ipcRenderer.invoke<\/code> \u00e7a\u011fr\u0131lar\u0131 yapar.<\/p>\n<h4>Bildirimler ve Arka Plan G\u00f6revleri<\/h4>\n<p>Ana s\u00fcre\u00e7, uzun s\u00fcren arka plan g\u00f6revlerini y\u00fcr\u00fctebilir ve bu g\u00f6revler tamamland\u0131\u011f\u0131nda veya \u00f6nemli bir olay ger\u00e7ekle\u015fti\u011finde kullan\u0131c\u0131ya bildirim g\u00f6ndermek i\u00e7in Electron'\u0131n <code>Notification<\/code> API'sini kullanabilir. React taraf\u0131nda bu bildirimlerin durumu izlenebilir veya ana s\u00fcre\u00e7ten gelen bir mesajla UI'de g\u00f6sterilebilir.<\/p>\n<h4>Veritaban\u0131 Entegrasyonu (SQLite, NeDB)<\/h4>\n<p>Yerel bir veritaban\u0131 (\u00f6rne\u011fin SQLite veya NeDB) kullan\u0131l\u0131yorsa, veritaban\u0131 i\u015flemleri (okuma, yazma, g\u00fcncelleme, silme) her zaman ana s\u00fcre\u00e7 \u00fczerinden yap\u0131lmal\u0131d\u0131r. React, veritaban\u0131 i\u015flemlerini do\u011frudan yapamaz; bunun yerine ana s\u00fcrece istekler g\u00f6nderir ve sonu\u00e7lar\u0131 bekler. Bu, veritaban\u0131 ba\u011flant\u0131lar\u0131n\u0131n ve i\u015flemlerinin tek bir noktadan y\u00f6netilmesini sa\u011flayarak tutarl\u0131l\u0131k ve g\u00fcvenli\u011fi art\u0131r\u0131r.<\/p>\n<h3>7. Hata Ay\u0131klama ve Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>Veri al\u0131\u015fveri\u015fi s\u0131ras\u0131nda ortaya \u00e7\u0131kabilecek sorunlar\u0131 gidermek ve uygulaman\u0131n performans\u0131n\u0131 optimize etmek i\u00e7in baz\u0131 ipu\u00e7lar\u0131:<\/p>\n<h4>Electron Geli\u015ftirici Ara\u00e7lar\u0131 (DevTools) Kullan\u0131m\u0131<\/h4>\n<p>Electron, hem ana s\u00fcre\u00e7 hem de olu\u015fturucu s\u00fcre\u00e7 i\u00e7in Chrome Geli\u015ftirici Ara\u00e7lar\u0131'n\u0131 (DevTools) sunar.<br \/>\n*   <strong>Olu\u015fturucu S\u00fcreci DevTools:<\/strong> <code>mainWindow.webContents.openDevTools()<\/code> ile a\u00e7\u0131l\u0131r. React bile\u015fenlerini, a\u011f isteklerini, depolama durumunu ve konsol \u00e7\u0131kt\u0131lar\u0131n\u0131 incelemek i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>Ana S\u00fcre\u00e7 DevTools:<\/strong> Ana s\u00fcre\u00e7 bir Node.js ortam\u0131nda \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, onu hata ay\u0131klamak i\u00e7in farkl\u0131 bir DevTools penceresi gerekir. <code>app.on('ready', () => { mainWindow.webContents.openDevTools({ mode: 'detach' }); });<\/code> ile a\u00e7\u0131lan DevTools penceresinde, <code>console.log<\/code> \u00e7\u0131kt\u0131lar\u0131n\u0131 g\u00f6rebilir ve Node.js kodunuzda kesme noktalar\u0131 (breakpoints) ayarlayabilirsiniz.<\/p>\n<h4>Loglama ve Hata Yakalama Stratejileri<\/h4>\n<p>Hem ana hem de olu\u015fturucu s\u00fcre\u00e7lerde kapsaml\u0131 loglama yapmak, sorunlar\u0131 te\u015fhis etmek i\u00e7in kritik \u00f6neme sahiptir. <code>console.log<\/code> kullanman\u0131n yan\u0131 s\u0131ra, <code>electron-log<\/code> gibi k\u00fct\u00fcphanelerle loglar\u0131 dosyalara yazmak veya farkl\u0131 seviyelerde loglama yapmak daha geli\u015fmi\u015f hata ay\u0131klama imkanlar\u0131 sunar. IPC \u00e7a\u011fr\u0131lar\u0131nda <code>try-catch<\/code> bloklar\u0131 kullanarak hatalar\u0131 yakalamak ve kullan\u0131c\u0131ya anlaml\u0131 geri bildirimler sunmak \u00f6nemlidir.<\/p>\n<h4>IPC Mesaj Y\u00fck\u00fcn\u00fc Optimize Etme<\/h4>\n<p>IPC \u00fczerinden g\u00f6nderilen verinin boyutunu ve s\u0131kl\u0131\u011f\u0131n\u0131 minimize edin. Sadece gerekli veriyi g\u00f6nderin ve b\u00fcy\u00fck veri k\u00fcmelerini par\u00e7a par\u00e7a g\u00f6ndermeyi veya ana s\u00fcre\u00e7te i\u015fleyip \u00f6zetini g\u00f6ndermeyi d\u00fc\u015f\u00fcn\u00fcn. Gereksiz veya yinelenen IPC \u00e7a\u011fr\u0131lar\u0131ndan ka\u00e7\u0131n\u0131n.<\/p>\n<h4>Asenkron \u0130\u015flemler ve UI Donmalar\u0131n\u0131 Engelleme<\/h4>\n<p>Uzun s\u00fcren i\u015flemleri ana s\u00fcre\u00e7te asenkron olarak y\u00fcr\u00fct\u00fcn. <code>ipcRenderer.invoke<\/code> ve <code>ipcMain.handle<\/code> gibi Promise tabanl\u0131 metodlar\u0131 tercih edin. Ana s\u00fcre\u00e7te yo\u011fun CPU kullanan bir i\u015flem varsa, bunu bir Node.js Worker Thread'e devretmeyi d\u00fc\u015f\u00fcn\u00fcn, b\u00f6ylece ana s\u00fcre\u00e7 bloke olmaz ve UI duyarl\u0131 kal\u0131r. Olu\u015fturucu s\u00fcrecinde de uzun s\u00fcren i\u015flemleri web worker'lara ta\u015f\u0131yarak UI'nin donmas\u0131n\u0131 engelleyebilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Electron ve React aras\u0131nda g\u00fcvenli ve etkili veri al\u0131\u015fveri\u015fi, ba\u015far\u0131l\u0131 bir masa\u00fcst\u00fc uygulamas\u0131 geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir. <code>ipcMain<\/code>, <code>ipcRenderer<\/code>, preload script'leri ve <code>contextBridge<\/code> gibi ara\u00e7lar\u0131 do\u011fru bir \u015fekilde kullanarak, ana s\u00fcrecin g\u00fc\u00e7l\u00fc Node.js yeteneklerini React'in dinamik ve interaktif kullan\u0131c\u0131 aray\u00fcz\u00fcyle birle\u015ftirebilirsiniz. G\u00fcvenlik endi\u015felerini g\u00f6z \u00f6n\u00fcnde bulundurarak ba\u011flam izolasyonunu etkinle\u015ftirmek ve yaln\u0131zca gerekli API'leri g\u00fcvenli bir \u015fekilde if\u015fa etmek, uygulaman\u0131z\u0131n sa\u011flaml\u0131\u011f\u0131n\u0131 art\u0131racakt\u0131r. En iyi uygulamalar\u0131 takip ederek, hem performansl\u0131 hem de g\u00fcvenli Electron uygulamalar\u0131 geli\u015ftirebilir, kullan\u0131c\u0131lar\u0131n\u0131za sorunsuz bir deneyim sunabilirsiniz.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>Electron'da IPC ne anlama gelir?<\/h4>\n<p>IPC (Inter-Process Communication), Electron'\u0131n ana (main) s\u00fcreci ile olu\u015fturucu (renderer) s\u00fcre\u00e7leri aras\u0131nda mesaj al\u0131\u015fveri\u015fi yapmas\u0131n\u0131 sa\u011flayan mekanizmad\u0131r. Bu sayede, olu\u015fturucu s\u00fcre\u00e7ler Node.js ve i\u015fletim sistemi kaynaklar\u0131na eri\u015fmek i\u00e7in ana s\u00fcre\u00e7ten istekte bulunabilir.<\/p>\n<h4>Context Isolation neden \u00f6nemlidir?<\/h4>\n<p>Context Isolation (Ba\u011flam \u0130zolasyonu), olu\u015fturucu s\u00fcrecindeki web i\u00e7eri\u011finin JavaScript'i ile Electron'\u0131n dahili API'leri ve preload script'leri aras\u0131nda ayr\u0131 bir JavaScript ba\u011flam\u0131 olu\u015fturarak g\u00fcvenli\u011fi art\u0131r\u0131r. Bu, k\u00f6t\u00fc niyetli kodlar\u0131n Electron API'lerine do\u011frudan eri\u015fmesini veya preload script'ini manip\u00fcle etmesini engeller.<\/p>\n<h4>Preload scriptleri olmadan ileti\u015fim kurabilir miyim?<\/h4>\n<p>Evet, ancak bu \u00f6nerilmez ve g\u00fcvenlik riskleri ta\u015f\u0131r. Context Isolation etkinle\u015ftirildi\u011finde, preload script olmadan olu\u015fturucu s\u00fcre\u00e7 Electron API'lerine do\u011frudan eri\u015femez. Context Isolation devre d\u0131\u015f\u0131 b\u0131rak\u0131lsa bile, Node.js entegrasyonu a\u00e7\u0131k oldu\u011funda web i\u00e7eri\u011fi Node.js mod\u00fcllerine eri\u015febilir, bu da XSS sald\u0131r\u0131lar\u0131 i\u00e7in bir kap\u0131 aralar. Preload script'leri, g\u00fcvenli bir ileti\u015fim k\u00f6pr\u00fcs\u00fc olu\u015fturman\u0131n en iyi yoludur.<\/p>\n<h4>B\u00fcy\u00fck veri k\u00fcmelerini Electron ve React aras\u0131nda nas\u0131l aktarmal\u0131y\u0131m?<\/h4>\n<p>B\u00fcy\u00fck veri k\u00fcmelerini IPC \u00fczerinden do\u011frudan aktarmak performans sorunlar\u0131na yol a\u00e7abilir. Bunun yerine, veriyi ana s\u00fcre\u00e7te i\u015fleyip sadece \u00f6zetini veya gerekli par\u00e7alar\u0131n\u0131 olu\u015fturucuya g\u00f6ndermeyi d\u00fc\u015f\u00fcnebilirsiniz. Alternatif olarak, ana s\u00fcre\u00e7 veriyi bir dosyaya yaz\u0131p, dosya yolunu olu\u015fturucuya g\u00f6ndererek olu\u015fturucunun dosyay\u0131 okumas\u0131n\u0131 sa\u011flayabilir (ancak bu da g\u00fcvenlik endi\u015feleri yaratabilir ve dikkatli y\u00f6netilmelidir). En iyisi, IPC \u00e7a\u011fr\u0131lar\u0131nda veri y\u00fck\u00fcn\u00fc minimize etmektir.<\/p>\n<h4>G\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 nas\u0131l \u00f6nleyebilirim?<\/h4>\n<p>G\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nlemek i\u00e7in \u015fu ad\u0131mlar\u0131 izleyin:<br \/>\n*   Her zaman <code>contextIsolation<\/code> ve <code>nodeIntegration<\/code> ayarlar\u0131n\u0131 <code>false<\/code> olarak ayarlay\u0131n.<br \/>\n*   <code>preload<\/code> script'leri arac\u0131l\u0131\u011f\u0131yla <code>contextBridge.exposeInMainWorld<\/code> kullanarak sadece kesinlikle gerekli olan API'leri if\u015fa edin ve bu API'lerde girdi do\u011frulama yap\u0131n.<br \/>\n*   IPC kanallar\u0131n\u0131 beyaz listeye al\u0131n ve yaln\u0131zca g\u00fcvenilir kanallar \u00fczerinden ileti\u015fim kurun.<br \/>\n*   D\u0131\u015far\u0131dan y\u00fcklenen i\u00e7eri\u011fe g\u00fcvenmeyin ve kullan\u0131c\u0131 taraf\u0131ndan girilen verileri her zaman do\u011frulay\u0131n\/temizleyin.<br \/>\n*   Electron'\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 g\u00fcncel tutun.<\/p>\n","protected":false},"excerpt":{"rendered":"Uygulama Versiyonu: {version}","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-38491","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>Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog - 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\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog\" \/>\n<meta property=\"og:description\" content=\"Uygulama Versiyonu: {version}\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-01T09:00:44+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=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog\",\"datePublished\":\"2026-02-01T09:00:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/\"},\"wordCount\":2744,\"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\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/\",\"name\":\"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-01T09:00:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog\"}]},{\"@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":"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog - 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\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/","og_locale":"tr_TR","og_type":"article","og_title":"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog","og_description":"Uygulama Versiyonu: {version}","og_url":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-01T09:00:44+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog","datePublished":"2026-02-01T09:00:44+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/"},"wordCount":2744,"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\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/","url":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/","name":"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-01T09:00:44+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/electron-ve-react-arasinda-guvenli-ve-etkili-veri-alisverisi-kapsamli-bir-devlog\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Electron ve React Aras\u0131nda G\u00fcvenli ve Etkili Veri Al\u0131\u015fveri\u015fi: Kapsaml\u0131 Bir Devlog"}]},{"@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\/38491","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=38491"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38491\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}