- className 拼接
cnpm i classnames —save
<ul className="nav nav-pills">{files.map(file => {const fClassName = classnames({'nav-link': true,'active': file.id === activeId})return (<li className="nav-item" key={file.id}><a href="#"className={fClassName}onClick={(e)=>{e.preventDefault(); onTabClick(file.id)}}>{file.title}</a></li>)})}</ul>
- 使用scss
cnpm i node-sass —save
- 使用md编辑器
cnpm i —save react-simplemde-editor
在根函数中创建的 依赖性的函数会随着变量改变而改变, 如果某组件没有改变, key变量
生成唯一id
- cnpm i —save uuid
import uuidv4 from 'uuid/v4'let newId = uuidv4()
把数组循环找id 改为 map格式 id为key
{'1': {...File}}
- 新建个公用函数 处理
const newFile = {...files[id], body: value}// 变量当key 用中括号setFiles({...files, [id]: newFile})
electron 导入 fs
const fs = window.require('fs').promises
获取文件路径
app.getPath(name)
数据持久化
cnpm i electron-store --saveconst Store = window.require('electron-store')const store = new Store()store.set('name', 'Amy')console.log(store.get('name'))store.delete('name')
页面不渲染
delete files[id]setFiles(files)使用下面的setFiles({...files})
关闭拦截
mainWindow.on('close', (e) => {e.preventDefault()let choice = dialog.showMessageBox(mainWindow, {type: 'info',title: 'Information',message: '确定要关闭吗?',buttons: ['最小化','直接退出']});choice.then(res => {if (res.response === 1) {mainWindow = nullapp.exit()}// if (res.response === 0) {// mainWindow.maximize()// }})// const choice = dialog.showMessageBoxSync(this, {// type: 'info',// title: 'Information',// defaultId: 0,// message: '确定要关闭吗?',// buttons: ['最小化','直接退出']// })// if (choice === 0) {// e.preventDefault()// }})
单例
app.requestSingleInstanceLock() 只打开一个窗口
文档
https://umbrella22.github.io/electron-vue-template-doc/Overview/essentials/build.html#构建出web版本
