const {app,shell } = require(\'electron\')
let template = [
{
label:\'文件\',
submenu:[
{
label:\'新建\',
accelerator:\'CmdOrCtrl+N\',
click:(menuItem,browserWindow,event) => {
browserWindow.webContents.send(\'create-new-file\')
}
},
{
label:\'保存\',
accelerator:\'CmdOrCtrl+S\',
click:(menuItem,browserWindow,event) => {
browserWindow.webContents.send(\'create-edit-file\')
}
},
{
label:\'搜索\',
accelerator:\'CmdOrCtrl+F\',
click:(menuItem,browserWindow,event) => {
browserWindow.webContents.send(\'search-file\')
}
},
{
label:\'导入\',
accelerator:\'CmdOrCtrl+O\',
click:(menuItem,browserWindow,event) => {
browserWindow.webContents.send(\'import-file\')
}
},
]
},
{
label:\'编辑\',
submenu:[
{
label:\'撤销\',
accelerator:\'CmdOrCtrl+Z\',
role:\'undo\'
},
{
label:\'重做\',
accelerator:\'Shift+CmdOrCtrl+Z\',
role:\'undo\'
},
{
type:\'separator\'
},
{
label:\'剪贴\',
accelerator:\'CmdOrCtrl+X\',
role:\'cut\'
},
{
label:\'复制\',
accelerator:\'CmdOrCtrl+C\',
role:\'copy\'
},
{
label:\'粘贴\',
accelerator:\'CmdOrCtrl+V\',
role:\'paste\'
},
{
label:\'全选\',
accelerator:\'CmdOrCtrl+A\',
role:\'selectall\'
},
]
},
{
label:\'视图\',
submenu:[
{
label:\'刷新当前页面\',
accelerator:\'CmdOrCtrl+R\',
click:(item,focusedWindow) => {
if(focusedWindow){
focusedWindow.reload()
}
}
},
{
label:\'切换全屏幕\',
accelerator:(() => {
if(process.platform === \'darwin\'){
return \'Ctrl+Command+F\'
}else{
return \'F11\'
}
})(),
click:(item,focusedWindow) => {
if(focusedWindow){
focusedWindow.setFullScreen(!focusedWindow.isFullScreen())
}
}
},
{
label:\'切换开发者工具\',
accelerator:(function(){
if(process.platform === \'darwin\'){
return \'A+Command+I\'
}else{
return \'Ctrl + Shift + I\'
}
})(),
click:(item,focusedWindow) => {
if(focusedWindow){
focusedWindow.toggleDevTools()
}
}
}
]
},
{
label:\'窗口\',
role:"window",
submenu:[
{
label:\'最小化\',
accelerator:\'CmdOrCtrl+M\',
role:"minimize"
},
{
label:\'关闭\',
accelerator:\'CmdOrCtrl+W\',
role:"close"
}
]
},
{
label:\'帮助\',
role:"help",
submenu:[
{
label:\'学习更多\',
click:() => {
shell.openExternal(\'http://electron.atom.io\')
}
}
]
},
]
if(process.platform === \'darwin\'){
const name = app.getName()
template.unshift({
label:name,
submenu:[{
label: `关于${name}`,
role:"about"
},{
type:\'separator\'
},{
label:\'设置\',
accelerator:\'Command+,\',
click:() => {
}
},{
label:\'服务\',
role:\'services\',
submenu:[],
},{
type:\'separator\'
},{
label: `隐藏${name}`,
accelerator:\'Command+ H\',
role:"hide"
},{
label: `隐藏其它`,
accelerator:\'Command + Alt + H\',
role:"hideotheres"
},{
label: `显示全部`,
role:"unhide"
},{
type:\'separator\'
},{
label: \'退出\',
accelerator:\'Command + Q\',
click: () => {
app.quit()
}
}]
})
}
module.exports = template
const { app,BrowserWindow,Menu } = require(\'electron\')
const isDev = require(\'electron-is-dev\')
const menuTemplate = require(\'./src/menuTemplate\')
const menu = Menu.buildFromTemplate(menuTemplate)
Menu.setApplicationMenu(menu)
---监听点击的事件----
useEffect(()=>{
const callback = () => {
console.log(\'hello from menu\');
}
ipcRenderer.on(\'create-new-file\',callback)
return () => {
ipcRenderer.removeListener(\'create-new-file\',callback)
}
})\
------------------
import { useEffect } from \'react\';
const { ipcRenderer } = window.require(\'electron\')
// const obj = {
// \'create-file\':()=>{}
// }
const useIpcRenerer = (keyCallbackMap) => {
useEffect(()=>{
Object.keys(keyCallbackMap).forEach( key => {
ipcRenderer.on(key,keyCallbackMap[key])
})
return () => {
Object.keys(keyCallbackMap).forEach( key => {
ipcRenderer.removeListener(key,keyCallbackMap[key])
})
}
})
}
export default useIpcRenerer
import useIpcRenerer from \'./hooks/useIpcRenderer\';
useIpcRenerer({
\'create-new-file\':createNewFile,
\'import-file\':importFiles,
\'save-edit-file\': saveCurrentFile
})