Как связать tsx представление с preload.js в Electron + React + TypeScript приложении

Только осваиваю экосистему JavaScript. Делаю десктоп приложение на Electron + React + TypeScript (ну и Webpack еще). Задача: сделать 2х страничное приложение, на второй странице сделать панель с различными настройками, и возможностью их сохранения в какое-либо хранилище (Electron-Store или INI файл например). Идеология электрона заключается в двух типах процессов: главный процесс и процессы рендеринга. В процессах рендеринга я не могу импортировать API NodeJS. Для этого нужно использовать preload.js. Если я все это делаю без React - то я просто делаю html файл, в котором назначаю id "btnUpdateSettings" кнопке сохранения и в preloadJs пишу:

const { ipcRenderer } = require('electron')

window.addEventListener('DOMContentLoaded', () => {
    
    const btnUpdateSettings = document.getElementById('btnUpdateSettings')
    btnUpdateSettings.addEventListener('click', async () => {
        ipcRenderer.send('updateSettings', {
            setting1: (document.getElementById('setting1') as HTMLInputElement).value,
            setting2: (document.getElementById('setting2') as HTMLInputElement).value,
            setting3: (document.getElementById('setting3') as HTMLInputElement).value,
        })
    })
)

В main - процессе я этот объект с настройками ловлю и сохраняю.

Но в React приложении этот код выполнится только один раз в момент первоначальной загрузки страницы. И учитывая что панель с настройками будет не на главной странице приложения, то и кнопки с id=btnUpdateSettings в момент первоначальной загрузки страницы там не будет.

Честно говоря - перерыл весь гитхаб в поисках шаблона подобного приложения. Шаблоны есть, но все максимально простые, и такой функциональности я не нашел.

Как в связке Electron + React в файле preload.js привязывать обработчики событий React компонентов? Или можно как то совсем по другому решать подобные задачи?


Ответы (0 шт):