【招聘App】—— React/Nodejs/MongoDB全栈项目:项目准备
前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅。最终成果github地址:https://github.com/66Web/react-antd-zhaoping,欢迎star。
一、项目概述

二、需求分析

- 文件架构和规范
- src目录:前端源码目录
- server目录:后端express目录
- 根据功能文件夹:component,container,reducers等
- router划分页面方式
- 进入应用时获取用户信息,用户未登录跳转login页面
- Login和reigster页面不需要权限认证
- 用户信息,聊天列表,职位列表页面共享底部tabbar
- 其它注意事项
- Mongodb字段设计
- axios发送异步请求
- redux管理所有数据,组件尽量用antd-mobile,弱化css
三、React开发环境
- Ceate-reacp-app脚手架生成文件格式
- 官网:https://github.com/facebookincubator/create-react-app
- 全局安装:
npm install -g create-react-app
- 新建项目:
create-react-app my-project
- 开启调试环境:
npm start
- 查看调试页面:浏览器访问localhost:3000
- 脚手架命令
- 安装第三方库redux:
npm install redux --save
- 弹出配置文件,自定义配置webpack:
npm run eject
- 扩展package.json里的script字段,扩展npm run命令
四、ES6常用语法
- ES6是新的JavaScript语法规范
- 使用babel语法转换器,支持低端浏览器
- 流行的库基本都属于ES6构建,React默认使用ES6新语法开发
- ES6语法概述:块级作用域、字符串、函数、对象扩展、解构、类、模块化
五、AntD-Mobile组件库
- 蚂蚁金服出品的UI组件库:antdesignPC端使用,ant-mobile移动端使用
- Ant Design Mobile:一个基于 Preact / React / React Native 的 UI 组件库
- 官网:https://mobile.ant.design/index-cn 【AntUI文档】
- 安装:
npm install antd-mobile --save
//或使用yarn更块
yarn add antd-mobile --save
- 使用组件
import {Button} from 'antd-mobile'
import 'antd-mobile/dist/antd-mobile.css' //全部加载 - 按需加载
- 安装babel-plugin-import(之后就可以不用引入css)
yarn add babel-plugin-import --save
- 配置:修改package.json中的bable项
"plugins":[
["import", { "libraryName": "antd-mobile", "style": "css" }] // `style: true` 会加载 less 文件
] - 个性化配置需要执行
npm run eject
- 兼容Web和ReactNative
- 常用组件:Import后可以直接使用
- Layout 布局组件
- 表单组件,数据展示组件,选择器等等
- 操作组件
六、前后端联调
- 使用axios发送异步请求
axios:简洁好用的发送请求库
npm install axios --save
- 如何发送:端口不一致,使用proxy配置转发
- package.json中:使用proxy统一端口
"proxy":"http://localhost:9093" //所有端口都转换到9093
- 获取数据(不使用redux的情况)
import axios from 'axios' constructor(props){
super(props)
this.state = {
data: {}
}
} componentDidMount(){
axios.get('/data')
.then(res => {
if(res.status == 200){
this.setState({data: res.data})
}
//console.log(res)
})
} <h2>我的名字是{this.state.data.user}</h2>
- 使用redux获取数据
- redux.js中:使用异步数据
import axios from 'axios' const USER_DATA = 'USER_DATA' const initState = {
user: '李云龙',
age: 20
}
export function auth(state=initState,action){
switch(action.type){
case USER_DATA:
return {...state, ...action.payload}
default:
return state
}
} //获取异步数据:axios.get,post发送请求,返回promise对象;Redux里获取数据,然后dispatch即可
export function getUserdata(){
//dispatch用来通知数据修改
return dispatch => {
axios.get('/data')
.then(res => {
if(res.status == 200){
dispatch(userData(res.data)
}
//console.log(res)
})
}
}
export function userData(data){
return {type:USER_DATA, payload:data}
} Auth.js中:渲染页面
import {connect} from 'react-redux' import {getUserData} from './Auth.redux' componentDidMount(){
this.props.getUserData()
} <h2>我的名字是{this.props.user},年龄{this.props.age}</h2> Auth = connect()(Auth)
export default Auth;
- axios拦截器,统一loading处理
config.js中:专门配置axios,Axios.interceptors设置拦截器,比如全局的loading
import axios from 'axios'
import {Toast} from 'antd-mobile' //轻提示 //拦截请求
axios.interceptors.request.use(function(config){
Toast.loading('加载中',0)
return config
}) //拦截响应
axios.interceptors.response.use(function(config){
Toast.hide()
return config
})index.js中:应用axios和antd配置
import './config'
import 'antd-mobile/dist/antd-mobile.css'
七、项目环境搭建
- 安装
yarn add antd-mobile babel-plugin-import axios express、
mongoose react-redux redux redux-thunk
redux-devtools-extension cookie-parser --saveyarn add babel-plugin-transform-decorators-legacy --save-dev
配置
"babel": {
"presets": [
"react-app"
],
"plugins": [
[
"import",
{
"libraryName": "antd-mobile",
"style": "css"
}
],
["@babel/plugin-proposal-decorators",
{ "legacy": true }
]
]
},
"proxy":"http://localhost:9093"reducer.js:合并所有reducer的文件
//合并所有reducer,并且返回
import {combineReducers} from 'redux' export default combineReducers({}) //暂无reducer
注:项目来自慕课网
【招聘App】—— React/Nodejs/MongoDB全栈项目:项目准备的更多相关文章
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:登录注册
前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:消息列表
前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:socket.io&聊天实现
前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:信息完善&用户列表
前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:个人中心&退出登录
前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...
- 一个 Vue & Node 的全栈小项目
约学 - 可以寻找一起自习的小伙伴的Web APP 一个基于 Vue & Node 的移动端全栈小项目 在线演示(请使用移动端查看效果) 源码地址: https://github.com/G- ...
- 基于NodeJS的全栈式开发
前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的 NodeJS,试 ...
- (转)也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)
原文链接:http://ued.taobao.org/blog/2014/04/full-stack-development-with-nodejs/ 随着不同终端(pad/mobile/pc)的兴起 ...
- 也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)
前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图 ...
随机推荐
- IC卡的传输协议(2)-块传输协议T=1续【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_172025.HTM (3)容错操作 先来看一下容错的规则定义. * 复位应答后,第一个数据块是由终端发往IC卡的,而且 ...
- selenium3+python自动化50-环境搭建(firefox)【转载】
前言 有不少小伙伴在安装selenium环境后启动firefox报错,因为现在selenium升级到3.0了,跟2.0的版本还有有一点区别的. 安装环境过程中主要会遇到三个坑: 1.'geckodri ...
- 实战WCF中net.tcp和net.msmq绑定协议
平时很少写博文的,以前都是转载其他园友的文章,这几天有时间就自己尝试写一些wcf相关的文章,希望能给有需要的人带来一点帮助吧,水平有限再加上初次动手,写得不好还请多多包含!废话不多说了直接进入正题. ...
- 用 grunt-contrib-connect 构建实时预览开发环境 实时刷新
本文基本是参照着 用Grunt与livereload构建实时预览的开发环境 实操了一遍,直接实现能实时预览文件列表,内容页面.不用刷新页面了,这比以前开发网页程序都简单. 这里要用到的 Grunt 插 ...
- 【转】Python模块subprocess
subprocess 早期的Python版本中,我们主要是通过os.system().os.popen().read()等函数.commands模块来执行命令行指令的,从Python 2.4开始官方文 ...
- 【转】requests、BeautifulSoup使用总结
转自,https://www.cnblogs.com/wupeiqi/articles/6283017.html ---- Python标准库中提供了:urllib.urllib2.httplib等 ...
- scrapy 工作流程
Scrapy的整个数据处理流程由Scrapy引擎进行控制,其主要的运行方式为: 引擎打开一个域名,蜘蛛处理这个域名,然后获取第一个待爬取的URL. 引擎从蜘蛛那获取第一个需要爬取的URL,然后作为请求 ...
- C++-二维vector初始化大小方法-备忘
来源: C++——二维vector初始化大小方法 1.直接用初始化方法 名字为vec,大小为n*m,初始值为0的二维vector. vector<vector<)); 2.用resize( ...
- aoj 0033 Ball【dfs/枚举】
有一个形似央视大楼(Orz)的筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B裤管或C裤管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B裤管和C裤管中的球从下 ...
- 百度之星资格赛 2016 Problem 1001
本文链接http://www.cnblogs.com/Ash-ly/p/5494618.html 题意: 度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串.现在麻烦来 ...