Github StackChat

技术栈

写这个软件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

组件的划分

因为先写了静态的组件,还没有加入状态,所以还没遇到什么难点

  1. 最顶层的组件是App
  2. 四个主要组件 LeftNav, SocialBar, ChatBar, SideBar,后期加入Redux可能要划分容器组件
<div className="AppContainer">
<LeftNav />
<SocialBar />
<ChatBar />
<Sidebar />
</div>
  1. 四个主要组件下分别划分了各个小组件

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端类微信聊天软件(一)的更多相关文章

  1. Node.js实现PC端类微信聊天软件(四)

    Github StackChat 学习回顾 React和Electron结合 TypeError: fs.existsSync is not a function 在React组件里引入electro ...

  2. Node.js实现PC端类微信聊天软件(五)

    Github StackChat 学习回顾 Socket.io 结合Express创建Socket.io服务器 const app = require('express')() const http ...

  3. Node.js实现PC端类微信聊天软件(二)

    Github StackChat 用到的React-Router React-Router是React路由的解决方案之一,也可以使用别的库 安装 npm install react-router -- ...

  4. Node.js实现PC端类微信聊天软件(三)

    Github StackChat Redux学习回顾 Redux的主要功能就是管理复杂交错的State,比如需要讲state提升到顶层组件的场景中,使用Redux就很合适 Redux主要提供三个东西来 ...

  5. js 判断pc端或手机端

    <script> (function () { var navUA = navigator.userAgent; var defIncludeStr = "iPhone|Andr ...

  6. Node.js系列:Buffer类的使用

    客户端JavaScript中没有对二进制数据提供很好的支持.但是在处理TCP流或文件流时,必须要处理二进制数据.Node.js定义了一个Buffer类,用来创建一个专门存放二进制数据的缓存区. Buf ...

  7. Node.js之使用Buffer类处理二进制数据

    Node.js之使用Buffer类处理二进制数据 Buffer类可以在处理TCP流或文件流时处理二进制数据,该类用来创建一个专门存放二进制数据的缓存区. 1. 创建Buffer对象 1.1 直接创建: ...

  8. react网页版聊天|仿微信、微博web版|react+pc端仿微信实例

    一.项目介绍 基于react+react-dom+react-router-dom+redux+react-redux+webpack2.0+nodejs等技术混合开发的仿微信web端聊天室react ...

  9. 基于Node.js+socket.IO创建的Web聊天室

    这段时间进了一个新的项目组,项目是用Appcan来做一个跨平台的移动运维系统,其中前台和后台之间本来是打算用WebSocket来实现的,但写好了示例后发现android不支持WebSocket,大为受 ...

随机推荐

  1. 编程语言和python介绍, 变量,小整数池,垃圾回收机制

    1.编程语言的发展史 计算机是基于电工作(基于高.低电平)1010010101011 1.机器语言 优点:执行速度够快 缺点:开发效率非常低 2.汇编语言(通过英文字符组成) 优点:执行效率相较于机器 ...

  2. DataNode 工作机制

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_35641192/article/d ...

  3. Java验证jwt token

    https://jwt.io/ RS256加密JWT生成.验证 https://blog.csdn.net/u011411069/article/details/79966226 How to loa ...

  4. 验证码破解 | Selenium模拟登陆12306

    12306官网登录的验证码破解比较简单,验证码是常规的点触类型验证码,使用超级鹰识别率比较高. 思路: (1)webdriver打开浏览器: (2)先对整个屏幕截屏,通过标签定位找到验证码图片,并定位 ...

  5. [Java] Spring boot 的maven设置阿里云仓库

    Spring boot 的maven设置阿里云仓库 打开根目录下的 pom.xml 文件,在对应为止出加入如下 红色 代码: <build> <plugins> <plu ...

  6. Linux执行shell脚本的方法

    Linux下有个脚本/home/start.sh,常用的两种执行方法如下: 1../start.sh.注意此时start.sh脚本文件必须有可执行权限-x.类似的有以绝对路径来执行:/home/sta ...

  7. AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX

    AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX 一.什么是JSX 使用JSX声明一个变量(REACT当中的元素): const element =< ...

  8. 内核过DSE驱动签名验证.

    一丶简介 现在的驱动,必须都有签名才能加载.那么如何加载无签名的驱动模块那. 下面可以说下方法.但是挺尴尬的是,代码必须在驱动中编写.所以就形成了 你必须一个驱动带有一个签名加载进去.执行你的代码.p ...

  9. 一条简单的 SQL 执行超过 1000ms,纳尼?

    阅读本文大概需要 2.8 分钟. MySQL 对我说 “Too young, too naive!" ▌大概过程 在测试环境 Docker 容器中,在跨进程调用服务的时候,A 应用通过 Du ...

  10. 责任链模式(chainOfResponsibility)

    参考文章:http://wiki.jikexueyuan.com/project/design-pattern-behavior/chain-four.html 定义: 使多个对象都有机会处理请求,从 ...