Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据电子菜单单击更改Redux状态?_Javascript_Reactjs_Redux_Electron - Fatal编程技术网

Javascript 如何根据电子菜单单击更改Redux状态?

Javascript 如何根据电子菜单单击更改Redux状态?,javascript,reactjs,redux,electron,Javascript,Reactjs,Redux,Electron,我正在基于React和Redux构建一个应用程序。我从,这是非常简单和容易理解 我希望用户在Electron菜单上打开一个文件,因此,我希望调用reducer并更改Redux应用程序状态。非常简单的概念 问题是我不知道如何从根组件外部更改Redux状态。电子菜单在中定义。根组件与Redux状态(存储变量)一起定义在中 在main.js文件中,我想做如下操作: submenu: [{ label: '&Open', accelerator: 'Ctrl+O',

我正在基于React和Redux构建一个应用程序。我从,这是非常简单和容易理解

我希望用户在Electron菜单上打开一个文件,因此,我希望调用reducer并更改Redux应用程序状态。非常简单的概念

问题是我不知道如何从根组件外部更改Redux状态。电子菜单在中定义。根组件与
Redux状态
(存储变量)一起定义在中

main.js
文件中,我想做如下操作:

  submenu: [{
    label: '&Open',
    accelerator: 'Ctrl+O',
    click: function() {
        // I want to change my app Redux state here. But I don't know how.
    }
  }

有什么想法吗?

您可以在主进程中获取文件名,然后通过Electron IPC将其发送到渲染器进程,例如:

main.js中

// mainWindow = new BrowserWindow();

submenu: [{
  label: '&Open',
  accelerator: 'Ctrl+O',
  click: () => {
    // popup a dialog to let the user select a file
    // ...
    // then send the filename to the renderer process
    mainWindow.webContents.send('open-file', selectedFilename);
  }
}]
import { ipcRenderer } from 'electron';

ipcRenderer.on('open-file', (event, filename) => {
  store.dispatch({ type: 'OPEN_FILE', filename });
});
index.js中

// mainWindow = new BrowserWindow();

submenu: [{
  label: '&Open',
  accelerator: 'Ctrl+O',
  click: () => {
    // popup a dialog to let the user select a file
    // ...
    // then send the filename to the renderer process
    mainWindow.webContents.send('open-file', selectedFilename);
  }
}]
import { ipcRenderer } from 'electron';

ipcRenderer.on('open-file', (event, filename) => {
  store.dispatch({ type: 'OPEN_FILE', filename });
});

另一个选项是使用
remote
模块在渲染器端(在
index.js
中)构建菜单,然后您可以直接从单击回调调用调度程序。

要更改应用程序状态,只需调用一个操作。在目前的情况下这不可能吗?上帝保佑你的灵魂。非常好的解决方案