electron之旅(二)react使用

2023-05-16

首先使用react模板

我们这里使用的是vite和yarn

yarn create vite #创建vite的react-js模板

在这里插入图片描述

初始化依赖

yarn

添加依赖

state(状态管理)

yarn add redux react-redux

routes(react路由)

yarn add react-router-dom

electron依赖

yarn add electron vite-plugin-electron cross-env -D

修改&添加文件

创建(根目录(与src同级))\electron/index.js

import { app, BrowserWindow } from "electron";
import path from "path";

const createWindow = () => {
  const win = new BrowserWindow({
    webPreferences: {
      // 允许渲染进程使用node
      contextIsolation: false,
      nodeIntegration: true,
    },
  });
  // app.isPackaged 字段存在bug,即使正常打包后,仍然为false,所以不能用来判断项目是否经过打包
  if (process.env.NODE_ENV === 'development') {
    // 开发环境
    // process.env.VITE_DEV_SERVER_URL获取开发服务器的url
    // vite版本不同,VITE_DEV_SERVER_URL字段也有所变化,打印process.env查找具体的名称
    win.loadURL(process.env.VITE_DEV_SERVER_URL);
  } else {
    // 生产环境
    win.loadFile(path.join(__dirname, "../dist/index.html"));
  }
};

app.whenReady().then(createWindow)

package.json

{
  "name": "electron_react_js_test01",
  "private": true,
  "version": "0.0.0",
  "type": "commonjs",//修改
  "main": "dist-electron/index.js",//添加
  "scripts": {
    "dev": "cross-env NODE_ENV=development vite",//修改
    "build": "vite build",
    "preview": "vite preview"
  },
  ...
}

vite.config.js

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

import electron from "vite-plugin-electron"//添加

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    react(),
    //添加
    electron({
      entry: 'electron/index.js'
    })
  ],
})

yarn dev #即可

react状态管理&react路由

store.js

import {legacy_createStore} from "redux"

//当然里面的数据自定义,这里只是一个参照
const defaultState = {
    num:0,
    isHome:false
}

const reducer = (state = defaultState,action = {type,data}) =>{
  //深拷贝
  let newState = JSON.parse(JSON.stringify(state))

  //当然里面的数据自定义,这里只是一个参照
  switch(action.type){
    case "returnHome":
        newState.isHome = true
        break
    case "QiTaPage":
        newState.isHome = false
        break
    default:
        break
  }

  return newState
}

const store = legacy_createStore(reducer)

export default store


routes.jsx

import { Navigate } from "react-router-dom"
import Master from "./pages/master/Master"
import Home from "./pages/master/home/Home"
import Anime from "./pages/master/anime/Anime"

const routes = [
    {
        path: '/master',
        element: <Master />,
        children: [
            {
                path: 'home',
                element: <Home />
            },
            {
                path: 'anime',
                element: <Anime />
            }
        ]
    }
]


export default routes

main.jsx

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
import './index.css'
import { Provider } from 'react-redux'
import { HashRouter } from 'react-router-dom'
import store from './store'

ReactDOM.createRoot(document.getElementById('root')).render(
  <Provider store={store}>
    <HashRouter>
      <App />
    </HashRouter>
  </Provider>
)

./src/App.jsx


渲染进程react和主进程通讯

渲染进程(以创建窗口为例)

import {useState, useEffect} from "react"
import { useSelector,useDispatch } from "react-redux"

import { ipcRenderer } from "electron"//主要引入

import anime from './anime.module.css'

function Anime(props){
    return (
        <div className={anime.all}>
        	{/*主要*/}
            <button onClick={()=>ipcRenderer.send('new-win')}>点击新页面</button>
        </div>
    )
}

export default Anime

主进程(以创建窗口为例)

import { app, BrowserWindow, ipcMain } from "electron";
import path from "path";

const createWindow = () => {
  const win = new BrowserWindow({...});
  //添加
  ipcMain.on('new-win',()=>{
    const newWin = new BrowserWindow({
        width:300,
        height:250,
        webPreferences: {
            // 允许渲染进程使用node
            contextIsolation: false,
            nodeIntegration: true,
        },
    })
    newWin.loadURL("https://www.bilibili.com") //可以自行修改
  })
....

问题1

TypeError: path.join is not a function

问题1图片

解决
yarn add vite-plugin-electron-renderer

vite.config.js

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

import electron from "vite-plugin-electron"

import electron_render from "vite-plugin-electron-renderer" //添加
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    react(),
    electron({
      entry: 'electron/index.js'
    }),
    electron_render()//添加
  ],
})

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

electron之旅(二)react使用 的相关文章

  • Node.js 中 require 的正确方法是什么?

    我刚刚开始使用 Node js 和 Electron 并且在文档和示例代码中都看到了有关如何请求模块的各种方法 具体来说 我正在尝试遵循this https medium com developers writing building a
  • ContentSecurityPolicy 防止 Electron 中的获取请求

    我正在尝试构建一个发出 api 请求的电子应用程序 但是当我进行 api 调用时 出现以下错误 拒绝连接到 因为它违反了以下内容安全策略指令 default src self unsafe inline data 请注意 connect s
  • React 远程控制台日志记录

    我使用 Mongo 设置了 Express 服务器 以便在使用 React 对 Electron 应用程序进行调试测试期间记录控制台日志 我只是使用 ajax 发送通常使用 console log 打印的内容 这对于我想要记录的单个事件效果
  • Electron 中渲染器和主进程的区别

    我最初认为 Electron 中的渲染器进程是在类似 chrome 的环境中沙箱化的 这意味着你所能做的就是弄乱 DOM 但是 我最近了解到您可以访问文件系统 运行子进程并获取其输出 以及导入您想要的任何其他节点模块 如果是这样的话 主进程
  • electro-forge如何指定打包的源目录?

    我已经操纵了创建反应应用程序与电子锻造app 现在我需要以某种方式指定从 CRA 生成的构建文件夹用于打包 该文件夹也应该被提供 电子锻造可以实现这样的事情吗 我知道您是在问如何告诉 electro forge 在哪个目录中找到源文件来打包
  • 如何使用Electron的app.getPath()来存储数据?

    我想将图像存储在用户计算机上 所以我认为它应该存储在用户数据文件夹中 如上所述here https github com electron electron blob master docs api app md appgetpathnam
  • 如何将原始二进制数据转换为 blob 并将其显示在 img 标记中?

    我正在 Electron 和 Svelte 中制作梦想日记应用程序 我有一种自定义文件格式 其中包含标题 描述和一张或多张图像 看 程序输入 文件输出 当我需要的时候 我可以打电话ipcRenderer invoke 在主进程中读取文件 然
  • 在 Atom-shell 中禁用退格键

    我一直在搜索 interwebz 和 Atom shell 文档 试图找出如何禁用back 的功能backspace浏览器窗口中的键 我不想求助于 javascriptonkeydown监听器 有效 而是使用更本机的东西 更多地在应用程序级
  • 无法启动 Electron 应用程序 - 缺少 package.json

    我目前正在做一个 Python 项目 我想在 Electron 应用程序中显示我的结果 我在 YouTube 上看过一个关于如何在 Mac 上设置 Electron 的演示视频 该视频展示了在终端中执行的 3 个简单步骤 git clone
  • 是否可以使用 Selenium WebDriver 来自动化桌面应用程序?

    我正准备为目前处于开发初始阶段的 Web 桌面应用程序编写自动化测试 将使用的技术是 Laravel VueJS 和最重要的 Electron Framework Electron 是一个使用 JavaScript HTML 和 CSS 等
  • Node子进程打包Electron App后立即退出

    我的电子应用程序的 GUI 部分中有这段代码 从终端运行时它可以正常工作 我已经使用 电子打包器 打包了应用程序 然后我开始遇到一些问题 最初 子进程立即终止并给出代码 127 我通过使用此处讨论的 修复路径 模块解决了该问题 https
  • 如何使用react-router重新加载页面?

    我可以在这个文件中看到 https github com ReactTraining react router blob v0 13 3 modules createRouter js https github com ReactTrain
  • 在电子应用程序中从主程序到渲染器发出自定义事件

    所以我知道这是有效的 因为我尝试过 但它没有在任何地方记录 所以我问是否可以使用这种做法 而不用担心它将来会停止工作 众所周知 Electron 和 Nodejs 会破坏一个东西 版本到另一个 这就是我所说的练习类型 main js app
  • 处理来自 Electron (或其他桌面平台)的 oauth2 重定向

    这主要是缺乏对 oauth2 的理解 并且可能不是特定于 Electron 的 但是我试图理解某人如何处理来自桌面平台 如 Electron 的 oauth2 重定向 url 假设应用程序中没有 Web 服务设置 桌面应用程序如何提示用户输
  • Electron Web 蓝牙 API requestDevice() 错误

    我正在尝试开发一个与蓝牙低功耗设备通信的应用程序 我使用 Web Bluetooth API 建立了一个工作 网站 一切正常 所以我使用 Electron 框架来构建一个应用程序 这个问题是已知的 如果你开始navigator blueto
  • 如何在 Electron 桌面应用程序中使用 Google 登录?

    我正在使用 Node js 和 Express 制作一个简单的应用程序 它严重依赖 Google 登录来获取个人资料图片和昵称 当在新的 Electron 应用程序中测试它时 我遇到了错误 此浏览器或应用程序可能不安全 尝试使用不同的浏览器
  • 如何在 Windows 中将 Electron 应用程序部署为可执行文件或可安装文件?

    我想生成一个独特的 exe文件来执行应用程序或 msi安装应用程序 怎么做 您可以使用以下方式打包您的程序电子包装机 https github com maxogden electron packager然后使用以下命令构建单个安装 EXE
  • Electron 中的收据热敏打印机

    我需要找到一种在 javascript 中打印收据的方法Electron 我已经尝试过了QZ TRAY但由于 Electron 它不起作用 我也尝试过节点热敏打印机但它也从来没有对我有用 这里有人知道如何在 javascript Elect
  • 在电子中播放本地mp4文件

    我正在尝试开发一个小应用程序 其中我首先通过以下方式捕获屏幕aperture包 然后尝试使用在屏幕上显示它video tag 我通过以下方式捕获屏幕 import apertureConstructor from aperture cons
  • 错误:找不到模块 \node_modules\sqlite3\lib\binding\electron-v8.0-win32-x64\node_sqlite3.node'

    我在 Electron 8 1 中安装 sqlite3 时遇到问题 我收到以下错误 Error Cannot find module D TASK 2020 1 1 AMS node modules sqlite3 lib binding

随机推荐

  • 【华为2019年校园招聘】2019-4-17 软件题-最大时间问题

    输入描述 输入为一个整数数组 xff0c 数组内有六个整数 输入整数数组长度为6 xff0c 不需要考虑其他长度 xff0c 元素值为0或者正整数 xff0c 6个数字每个数字只能使用一次 输出描述 输出为一个24进制格式的时间 xff0c
  • 【华为2019年校园招聘】2019-4-17 软件题-水果摊小买卖

    题目描述 小王手里有点闲钱 xff0c 想着做点卖水果的小买卖 xff0c 给出两个数组m xff0c n xff0c 用m i 表示第i个水果的成本价 xff0c n i 表示第i个水果能卖出的价钱 xff0c 假如现在有本钱k元 xff
  • ubuntu20.04安装微信和QQ,腾讯会议,以及一些其他实用软件

    由于电脑性能不行 xff0c 所以有windows 转为ubunut20 04 xff0c 这样电脑流畅多了 美化了下它的UI xff0c 美化的差不多了 xff0c 之后 xff0c 就差安装微信和qq了 xff0c 微信对于我来说是必要
  • 组合导航(GNSS+惯性导航)

    一 GNSS 至少需要四颗星 怎么判断GNSS数据是否准确 xff1f 数据中是否携带星数 xff1f 二 惯性导航 关于磁力计的使用 xff1a 1 xff09 类似重力 xff0c 磁力也是一个矢量 地球任意位置的磁力在东北天地理系下的
  • ROS之消息发布和接收

    ros Subscriber subscriber 61 nh subscribe topic name buff size amp CloudSubscriber msg callback this 参数1 xff1a 话题名字 参数2
  • IEDA 安装actiBPM插件

    一 引言 因为有个项目要用到activiti 来做工作流引擎 xff0c 但是发现自己的IDEA的插件市场里面已经找不到 actiBPM 这个插件了 xff0c 无奈只能去IEDA 插件网站先下载下来再进行安装了 二 actiBPM插件下载
  • STM32f103调试笔记(2)——使用ST-LINK下载程序的时候,不按住复位键无法下载?

    这也是很常遇见的一个问题了 使用ST Link下载程序的时候 xff0c 总是显示无法识别设备 xff0c 查阅了网上的解决方法 xff0c 只要按住复位键 xff0c 然后点击LOAD以后迅速松开复位键就可以了 这也是一种方法啦 xff0
  • VR/AR技术杂选

    相机频率 xff1a 一般来说 xff0c 相机频率60Hz是指相机的帧率为60fps xff0c 即frame per second 每秒钟60帧 红外探测器 xff1a 分为两种 xff0c 一种是基于光电特性 xff0c 一种是基于热
  • 【图像】光谱波长分布图

    可见光范围内的颜色倒序为 赤橙黄绿青蓝紫 猜你喜欢 xff1a x1f447 x1f3fb 图像 一个像素占几个字节 xff1f 多少比特 xff1f 图像 尺度不变特征变换算法 xff08 SIFT xff09 基于小波变换的图像边缘检测
  • 百度2014校园招聘-研发工程师笔试题(济南站)

    一 xff0c 简答题 30分 1 xff0c 当前计算机系统一般会采用层次结构存储数据 xff0c 请介绍下典型计算机存储系统一般分为哪几个层次 xff0c 为什么采用分层存储数据能有效提高程序的执行效率 xff1f xff08 10分
  • js中,export和module.export的区别

    说明 导出模块就是导出对象 xff0c export和module exports两者区别 xff1a export是设置导出模块对象的指定属性module export既可以设置导出模块的所有属性 xff0c 又可以设置导出模块的指定属性
  • ERROR:Session/line number was not unique in database. History logging moved to new session.

    摘要 xff1a 遇到此类错误 xff0c 可以通过分段调试的方法找到引发错误的位置 引发错误的原因不详 xff0c 可能很基础 Distribution of the peak number file 61 pd read excel 3
  • ubuntu xfce4和vncserver

    安装xfce4 sudo apt get install xfce4 如果你想创建一个新的用户 xff0c 而不是将桌面使用root权限登录 xff0c 可以执行下面的代码 xff1a 安装vncserver sudo apt instal
  • harmonyOS hdc配置以及自动签名

    hdc是sdk tools中自带的命令 xff0c 你没有配置系统环境变量指定它所在的目录 xff0c 肯定不能直接到处任意调用啊 xff0c 你需要进入到hdc exe所在路径的当前路径下才能去调用它 xff0c 或者你把它的路径加入到系
  • Vue脚手架(Vue-cli)安装

    脚手架是Vue官方提供的标准化开发工具 开发平台 官方文档开始 vue cli cli c command l line 行 interface 命令行接口工具 第一步 仅第一次执行 全局安装 64 vue cli npm install
  • 使用vscode开发配置uni-app(小程序)

    这个文件是用VsCode写uniapp小程序的步骤笔记 安装Vue脚手架 vue cli npm install g 64 vue cli 通过脚手架创建uni app项目 vue create p dcloudio uni preset
  • uniapp image组件的基本使用

    image组件的基本使用 就是用来显示图片的 src 来设置我们图像的路径 属性名类型默认值说明平台差异说明srcString图片资源地址 lt template gt lt div gt lt view gt lt image src 6
  • 将本机做成虚拟镜像文件(使用VMware vCenter Converter收取镜像)

    下载地址 xff08 需要账号 xff09 xff1a https customerconnect vmware com downloads info slug infrastructure operations management vm
  • uniapp 网络请求 get请求

    网络请求 在uni中可以调用uni request方法进行请求网络请求 需要注意的是 xff1a 在小程序中网络相关的API在使用需要配置域名白名单 官方文档 如果发起请求就调用我们这个uni request OBJECT 发送get请求
  • electron之旅(二)react使用

    首先使用react模板 我们这里使用的是vite和yarn span class token function yarn span create vite span class token comment 创建vite的react js模板