科协暑培(网站部分)学习型工程

EESAST Web Workshop

Demo View on GitHub
返回首页

Frontend (React & Webpack)

使用纯 HTML、CSS、JS 搭建网页,我们面临两个挑战:(1) 如果一次只改变部分(但很多)的页面元素,无论是用 JS 改 DOM 树还是重新写一个 HTML 都太费力 (2) 相同的页面元素组合只能复制粘贴,无法简单复用。为此,声明式、组件化的前端框架出现了。在本节中,我们会使用前端框架之一的 React 实现大部分的会议趣味功能,完成所有页面搭建。

环境配置

1. 请确保已安装
node -v
npm -v
yarn -v

以上三条命令均返回版本号即说明安装成功

2.(可选,建议)npm 和 yarn 换源

这里使用淘宝源和 yarn 官方源,网络情况基本稳定

npm config set registry https://registry.npmmirror.com
yarn config set registry https://registry.yarnpkg.com
3. 依赖安装

注意:由于前端代码在子文件夹内,一定要先切换对应文件夹再执行 npm/yarn 指令

cd frontend
yarn # 是 yarn install 的简写

安装过程输出日志较长,请检查其中没有 error(warning 是正常的)

4. 更改环境变量

前端的环境变量是以明文储存在.env文件中的,其中REACT_APP_BACKEND_URL是后端服务的地址,一般无需修改,如果已经在云服务器上部署了后端服务则可以改成对应地址;REACT_APP_HASURA_HTTPLINKREACT_APP_HASURA_WSLINK是 hasura(数据库)服务的地址,如果你先前使用了 hasura.io 官网提供的 hasura 服务,则需要改成你自己的 GraphQL endpoint,如果是在服务器上部署的 hasura 则也改成对应地址(注意区分http / httpsws / wss

此外,“关于这个工程”页的 JS 代码也使用到了后端服务,相应配置在/frontend/public/config.js中,对应变量apiUrl.env文件中的REACT_APP_BACKEND_URL保持一致即可

运行方式

如果没有在云服务器上部署后端服务,请先在本地启动后端服务

cd backend
yarn start

在切换到前端文件夹后,运行

cd frontend
yarn start

会自动打开浏览器访问http://localhost:3000,等待打包完成即可看到网页

已实现的功能

哈希值前 7 位 提交信息 对应知识点 实现效果
caa1dfb feat(05): Hello World from React React 环境搭建、 React 项目文件结构 主页内容被替换为 Hello World
f221e82 feat(05): JSX elements JSX 基本语法、JSX 元素的堆叠 主页上骰子工具的 UI
652d84e feat(05): React Components React 组件、React Hook (useState、useEffect、useRef) 骰子功能实现、倒计时功能实现
ea94cd5 feat(05): brick and mortar 组件的复合与嵌套、条件渲染、配合 JS 语法(map、filter 等) 秒表功能集成到计时组件上
ca4c615 feat(05): LoginPage 在 React 中使用包(antd、axios) 登陆页面
58e0dd1 feat(05): MainPanel 在 React 中使用包(react router、Apollo GraphQL) 登陆页面的跳转逻辑和主页上的控制台组件
f8cb54b feat(05): ChatBox & FileShare 聊天室和文件共享功能
ddfa9bd feat(05): UX improvements 提升用户体验,包括组件可拖拽、按需加载和移动端适配

注意事项

关于 rimraf

由于前端使用到的 npm 包通常数量较大、依赖复杂、占用空间大,因此如果操作失误需要推倒重来,在 windows 系统中使用正常的删除操作,node_modules 文件夹可能耗费很长的时间,甚至导致系统的崩溃。为此,有必要安装 rimraf 这个 npm 包,来实现类似于 Linux 系统中的rm -rf命令

npm install rimraf -g
rimraf node_modules # 删除某个文件夹,如 node_modules

作业

对于已完成数据库或后端作业的同学,可以选择其中之一完成相应的前端界面,如下:

对于尚未完成以上前置作业的同学,也可以从以下几组功能需求中选择一组实现:

提示:你有可能需要修改 graphql 文件并重新生成 graphql.tsx 来完成一些数据库操作