Node.js实现PC端类微信聊天软件(一)
技术栈
写这个软件StackChat的主要目的是巩固练习Node和对React的实践,也是为了学习东西,所以选用了这些自己还没在项目里使用过的技术,边学变写
- Electron
- React
- Material-UI
- React-Router
- Redux
- Express
- Socket.io
- MongoDB
现在已完成前端大部分界面的构建(无状态),所以记录一下
环境搭建
Create-React-App
利用React脚手架Create-React-App,再写入依赖npm install
"devDependencies": {
"@material-ui/core": "^4.1.1",
"electron": "^5.0.4",
"react-router": "^3.2.1",
}
material-ui最新版本需要react 16.8.0以上
安装配置electron
在package.json里配置入口
"main": "electron ./src/main.js"
热加载
Electron加载页面的两个方法
// win.loadFile('index.html')
win.loadURL('http://localhost:3000')
配合Create-React-App就可以直接在窗口里热加载
UI设计(无状态)

完成大部分后的UI
组件的划分
因为先写了静态的组件,还没有加入状态,所以还没遇到什么难点
- 最顶层的组件是App
- 四个主要组件 LeftNav, SocialBar, ChatBar, SideBar,后期加入Redux可能要划分容器组件
<div className="AppContainer">
<LeftNav />
<SocialBar />
<ChatBar />
<Sidebar />
</div>
- 四个主要组件下分别划分了各个小组件
Material-UI和React的使用
Material-UI是现在React非常流行的一个组件库,基于Material Design
Material-UI主要有三种添加样式的方法(CSS in JS)
https://material-ui.com/zh/styles/api/
makeStyles
自己的例子,第一个参数可以是生成样式或样式对象的函数
import { makeStyles } from '@material-ui/core/styles';
const useStyles = makeStyles(theme => ({
LeftNav: {
float: 'left',
...
},
LogoText: {
...
},
...
}));
useStyles返回CSS中的类名对象
export default function LeftNav() {
const classes = useStyles();
...
}
withStyles
第一个参数是生成样式或样式对象的函数,第二个是可选参数
import { withStyles } from '@material-ui/core/styles';
const styles = {
root: {
float: 'left',
width: 263,
height: 564,
backgroundColor: 'rgba(255, 250, 250)',
margin: '0px 0px',
padding: '8px 0px',
},
};
返回的是一个higher-order component,用来包装组件,返回一个带有之前传入的对象属性的新组件
export default withStyles(styles)(Sidebar);
小结
主要注意的是组件之间的拆分,在Material-UI样式的应用时,用function写的组件不能使用makeStyles,会违反钩子规则
Node.js实现PC端类微信聊天软件(一)的更多相关文章
- Node.js实现PC端类微信聊天软件(四)
Github StackChat 学习回顾 React和Electron结合 TypeError: fs.existsSync is not a function 在React组件里引入electro ...
- Node.js实现PC端类微信聊天软件(五)
Github StackChat 学习回顾 Socket.io 结合Express创建Socket.io服务器 const app = require('express')() const http ...
- Node.js实现PC端类微信聊天软件(二)
Github StackChat 用到的React-Router React-Router是React路由的解决方案之一,也可以使用别的库 安装 npm install react-router -- ...
- Node.js实现PC端类微信聊天软件(三)
Github StackChat Redux学习回顾 Redux的主要功能就是管理复杂交错的State,比如需要讲state提升到顶层组件的场景中,使用Redux就很合适 Redux主要提供三个东西来 ...
- js 判断pc端或手机端
<script> (function () { var navUA = navigator.userAgent; var defIncludeStr = "iPhone|Andr ...
- Node.js系列:Buffer类的使用
客户端JavaScript中没有对二进制数据提供很好的支持.但是在处理TCP流或文件流时,必须要处理二进制数据.Node.js定义了一个Buffer类,用来创建一个专门存放二进制数据的缓存区. Buf ...
- Node.js之使用Buffer类处理二进制数据
Node.js之使用Buffer类处理二进制数据 Buffer类可以在处理TCP流或文件流时处理二进制数据,该类用来创建一个专门存放二进制数据的缓存区. 1. 创建Buffer对象 1.1 直接创建: ...
- react网页版聊天|仿微信、微博web版|react+pc端仿微信实例
一.项目介绍 基于react+react-dom+react-router-dom+redux+react-redux+webpack2.0+nodejs等技术混合开发的仿微信web端聊天室react ...
- 基于Node.js+socket.IO创建的Web聊天室
这段时间进了一个新的项目组,项目是用Appcan来做一个跨平台的移动运维系统,其中前台和后台之间本来是打算用WebSocket来实现的,但写好了示例后发现android不支持WebSocket,大为受 ...
随机推荐
- 前段大数据传输 压缩解压 pako
我已经找到了解决的办法:用pako.inflate(); 在页面引入链接即可调用pako
- mysql 常用命令 | 表间 弱关联 join
show databases; use mhxy; select database(); show tables; desc account_list_175; ),(); select from_u ...
- 浏览器绘图模型的解释:renderObject、renderlayer
先来看这幅经典的图: https://juejin.im/entry/590801780ce46300617c89b8 renderObject相当于iOS 的view renderlayer完成了一 ...
- org.springframework.security.access.AccessDeniedException: Access is denied
org.springframework.security.access.AccessDeniedException: Access is denied at org.springframework.s ...
- 优化sql技巧
当表很大的时候可以设计冗余字段,避免与大表连表查询造成性能低下 比如日志表和用户表,日志表通常到后期会相当的大可以做一个username的冗余字段,避免查看username的时候去和user表关联 当 ...
- python函数 | 列表生成式
在编写程序或者查看别人的程序时,经常会遇到列表生成式,这个使用起来并不复杂,但是非常有用,使我们的代码更加简洁灵活.很多python使用者并不太会使用它.今天,就给大家详细讲解列表生成式和生成器表达式 ...
- Linux禁止ping和开启ping的方法
Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping. 一.通过修改 ...
- BiseNet阅读总结
一.思路 语义分割既需要丰富的空间信息,又需要较大的感受野.然而,现代方法通常会牺牲空间分辨率来实现实时推理速度,导致性能低下.本文提出了一种新的双边分割网络(BiSeNet)来解决这一难题.我们首先 ...
- Pandas 与 Numpy 常用方法总结
Lambda 函数实现 简单的说,lambda 就是一个函数,但是这个函数没有名字,所以我们介绍一下这个函数的调用形式,参数与返回值的实现. lambda 的格式如下: lambda [arg1 [, ...
- Exit 与 Goto :eof 在批处理中的区别【转】
在 CMD 命令提示符窗口直接运行: 1.) 运行 Goto :eof 后,CMD 返回并将等待下一命令. 2.) 运行 Exit 后,CMD 将直接关闭并返回到曾启动 Cmd.exe 的程序或返回到 ...