electron-happy-ipc
基于 electron IPC 进行二次封装,使 IPC 的方式像 http
请求一样方便简单。
在 electron 中,如果使用要使用 node API,则需要使用 Renderer Process 向 Main Process 发起通信(IPC),然后 Main Process 中处理相关逻辑。
而 IPC 通信则需要两个进程都需要先监听一个事件,在 SPA 带有生命周期的场景中,
Renderer Process
还需要监听、销毁等繁琐操作。且代码可读性差也不易于后期维护。
-
install
yarn add electron-happy-ipc #或者 npm install -S electron-happy-ipc
-
import
- 在 Main Process 中引用,类似
Koa router
的使用方式,作为 controller 方式管理 - 在 Renderer Process 中引用,类似于
axios
使用方式
-
Main Process
import server from 'electron-happy-ipc/server' server.use('test', async (ctx, data) => { // data => { a: 1 } from Renderer Process const result = await doSomething(data) ctx.reply(['1', '2', '3']) })
-
Renderer Process
这里以 react 组件举例说明
import React, { useState, useEffect } from 'react' import request from 'electron-happy-ipc/request' export default function IpcTest () { const [list, setList] = useState([]) useEffect(() => { init() }, []) const init = async () => { // request 取代 ipcRenderer.send 和 ipcRenderer.on const result = await request('test', { a: 1 }) // result => ['1', '2', '3'] from Main Process setList(result) } }
- 在 Main Process 中引用,类似
boolean 可选
默认 false
。多次调用,避免后续处理逻辑执行多次。
比如发起一个分页请求,点击第 2 页后,紧接着又点击了第 3 页,假如
第 2 页
的请求执行时间大于第 3 页
请求执行时间,那第 3 页的响应会先被 resolve,接着第 2 页的响应又被 resolve 了。结果就是当前要展示第 3 页,但数据却是第 2 页的。
注意:设置 cover 仍会向 Main Process 发送两次通信
const init = async () => {
try {
const result = await request({
url: 'test',
data: { a: 1 },
replace: true
})
console.log(result)
} catch (err) {
// 第一次调用 reject
}
}
init() // 假如 init 需要 500ms 才会返回
init() // 紧接着再次调用,上一次的 init 会立刻 reject。
number 可选
单位:ms(毫秒)
默认无
。设置此次请求的超时时间。
主要当传递 0 时,不生效。
设置全局配置。
import request, { setConfig } from 'electron-happy-ipc/request'
// 所有的 request 都会生效
setConfig({
replace: true,
timeout: 1000 * 60
})
// 还原全局设置
setConfig()
MIT