React Academy · Lektion

IPC-kommunikation mellan processer

Använd ipcMain och ipcRenderer för att skicka meddelanden säkert mellan huvudprocessen och React-renderingsprocessen.

Lektion 3 av 413 steg

IPC-kommunikation mellan processer är en gratis lektion i React Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

ipcMain.handle: Mönstret för förfrågan och svar

ipcMain.handle registrerar en namngiven kanal i huvudprocessen som svarar på förfrågningar från renderer-processen. Den tar emot en asynkron hanterarfunktion, och dess returvärde blir det upplösta värdet för Promiset i renderer-processen, vilket gör den lämplig för operationer som att läsa filer eller ställa frågor till en databas.

ipcRenderer.invoke: Anropa huvudprocessen

ipcRenderer.invoke skickar ett meddelande på en namngiven kanal och returnerar ett Promise som löses med returvärdet från huvudprocessens hanterare. Det skapar ett rent asynkront mönster för förfrågan och svar som fungerar naturligt med async/await i både preload-skriptet och React-komponenterna.

Exponera invoke via contextBridge

Preload-skriptet kapslar in anrop till ipcRenderer.invoke och exponerar dem via contextBridge. Exempel: api.readFile = (filePath) => ipcRenderer.invoke('read-file', filePath). Renderer-processen anropar window.api.readFile(path) och får tillbaka ett Promise — rent och sandboxat.

Varför renderer-processen aldrig importerar ipcRenderer

När contextIsolation är aktiverat kan renderer-processen inte använda require('electron') eller importera ipcRenderer direkt — modulen är helt enkelt inte tillgänglig. All IPC måste gå via preload-skriptets exponering genom contextBridge. Detta är avsiktligt: det hindrar XSS-attacker från att få åtkomst till IPC.

ipcMain.on: Meddelanden utan svar

ipcMain.on lyssnar efter enkelriktade meddelanden som skickas med ipcRenderer.send (inte invoke). Det finns ingen automatisk svarskanal — detta mönster passar aviseringar eller kommandon där renderer-processen inte behöver något svar, till exempel för att logga händelser eller utlösa en inbyggd avisering.

Skicka data från huvudprocessen till renderer-processen

Huvudprocessen kan skicka data till renderer-processen med webContents.send('channel-name', data). Detta är det primära sättet för huvudprocessen att initiera kommunikation — till exempel genom att vidarebefordra händelser från filsystemets bevakning eller åtgärder från inbyggda menyer till React-gränssnittet.

ipcRenderer.on: Lyssna i preload-skriptet

I preload-skriptet registrerar ipcRenderer.on('update', callback) en lyssnare för pushmeddelanden från huvudprocessen. Callback-funktionen tar emot händelsen och eventuella data som huvudprocessen skickade, och du skickar sedan vidare detta till renderingsprocessen via funktionen som exponeras av contextBridge.

Exponera händelselyssnare via contextBridge

Ett tydligt mönster för pushhändelser är: api.onUpdate = (callback) => ipcRenderer.on('update', (_event, data) => callback(data)). React-komponenter prenumererar genom att anropa window.api.onUpdate(setData), och callback-funktionen uppdaterar tillståndet när huvudprocessen skickar nya data.

Rensa upp: ta bort händelselyssnare

Varje ipcRenderer.on-lyssnare måste tas bort när den inte längre behövs för att förhindra minnesläckor och dubbla callback-anrop. Preload-funktionen bör returnera en cleanup-funktion (t.ex. () => ipcRenderer.removeListener('update', callback)) som React anropar i useEffect:s cleanup-returvärde.

Säkerhet: validera IPC-indata

IPC-indata från renderingsprocessen ska betraktas som opålitliga data i huvudprocessens hanterare. Validera alltid filsökvägar (förhindra path traversal-attacker), sanera frågeparametrar och kontrollera att avsändarens origin är den förväntade. Exponera aldrig en generell eval- eller exec-IPC-kanal.

Strukturera IPC-kanaler

När appen växer bör du organisera IPC-kanaler med namnkonventioner som använder namnutrymmen: 'fs:read-file', 'db:query', 'window:minimize'. Förvara kanalnamnen i en gemensam konstantfil som importeras av både main.js och preload-skriptet för att förhindra stavfel och göra refaktorering säkrare.

Returvärdet från ipcMain.handle

Vad händer med värdet som returneras av en ipcMain.handle-hanterare?

Sammanfattning av lektionen

IPC är ryggraden i kommunikationen i Electron. ipcMain.handle och ipcRenderer.invoke bildar ett Promise-baserat begäran-svar-par för åtgärder som initieras av renderingsprocessen. För pushmeddelanden som initieras av huvudprocessen samverkar webContents.send och ipcRenderer.on. All IPC i renderingsprocessen måste gå via preload-skriptets contextBridge, och lyssnare bör alltid rensas bort för att förhindra minnesläckor.

Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”IPC-kommunikation mellan processer” gratis?

Ja – hela texten till ”IPC-kommunikation mellan processer” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”IPC-kommunikation mellan processer”?

Använd ipcMain och ipcRenderer för att skicka meddelanden säkert mellan huvudprocessen och React-renderingsprocessen. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”IPC-kommunikation mellan processer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Electrons arkitektur: huvud- och renderingsprocesser
  2. Konfigurera React med Electron
  3. IPC-kommunikation mellan processer
  4. Paketering och distribution för datorplattformar
← Tillbaka till React Academy