Node.js实现PC端类微信聊天软件(三)
Redux学习回顾
Redux的主要功能就是管理复杂交错的State,比如需要讲state提升到顶层组件的场景中,使用Redux就很合适
Redux主要提供三个东西来进行状态管理
1. Action
表达要进行的动作,也就是通过view层触发,来进行派发来改变全局state
action创建函数
也就是只返回一个action的函数
export const SignUpEmailChange = (value) => ({
type: 'SIGNUP_EMAIL_CHANGE',
value: value,
})
action通常有一个type来进行判断要进行的动作,和任意其它的字段
2. Reducer
主要进行接收action根据其中的type来进行更改state
const registerChange = (state, action) => {
if (typeof state === 'undefined') {
return initialState
} else if(action.type === 'SIGNUP_NAME_CHANGE') {
return Object.assign({}, state, {
signUpForm: {
signup: true,
signupUsername: action.value,
signupEmail: state.signUpForm.signupEmail,
signupPwd: state.signUpForm.signupPwd,
},
})
}
...
}
Reducer拆分
当reducer膨胀时还可以进行拆分再用Redux提供的combineReducers进行组合
const Reducer = combineReducers({
ChatBar,
Message,
})
3. Store
Store作为全局的state
使用createStore来创建Store
const store = createStore(
Reducer,
Initialize,
applyMiddleware(thunk)
);
第二个第三个参数都是可选的,第一个参数就是进行执行动作的Reducer,第二个是初始化state,第三个为中间件
通过Provider组件来进行分发组件
<Provider store={store}>
<Router history={browserHistory}>
<Route path="/" component={App}>
<IndexRoute component={Login} />
<Route path="/home" component={MainPanel} />
</Route>
</Router>
</Provider>
dispatch函数
store通过提供dispatch函数来对action的派发,流程也就是
view -> action -> reducer -> store -> view
dispatch接收一个action创建函数
dispatch(onSignup())
React-Redux
Redux的一个React绑定库
主要提供的是connect把组件包装成容器
const Login = connect(
mapStateToProps,
mapDispatchToProps
)(SigninCmpt);
接收两个函数参数
mapStateToProps
主要负责把store映射到组件的props上
const mapStateToProps = (state) => ({
signup: state.signup,
})
mapDispatchToProps
一样是负责映射,把分发函数映射到组件的props上
const mapDispatchToProps = (dispatch) => ({
onSignup: () => {
dispatch(onSignup())
},
closeSignup: () => {
dispatch(closeSignup())
}
})
Redux-thunk
一个action异步处理库,主要功能是能够接收一个返回函数的action创建函数
const fetchSignUp = (username, email, password) => {
const url = 'http://localhost:8008/api/signup';
const data = {
username: username,
email: email,
password: password,
};
console.log('fetch', data)
return fetch(url, {
method: 'POST', // or 'PUT'
body: JSON.stringify(data), // data can be `string` or {object}!
headers: new Headers({
'Content-Type': 'application/json'
})
}).then(res => res.json())
.then(response => console.log('Success:', response));
}
export const SignUpUser = () => {
return (dispatch, getState) => {
// TODO fix parameters
fetchSignUp(getState().signUpForm.signupUsername, getState().signUpForm.signupEmail, getState().signUpForm.signupPwd)
.then(res => {
dispatch({
type: 'SIGNUP_USER',
sign: false,
})
})
}
}
thunk的在于能够将异步执行逻辑内聚在action中,其中实现利用的是Redux的中间件
MongoDB学习回顾
数据库类型
作为有别于关系型数据库的文档型数据库,其中集合对应于表,行对应与文档,列对应于字段
主要应用场景
- 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储.方便查询、更新- 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
- 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
- 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
- 视频直播,使用 MongoDB 存储用户信息、礼物信息等
安装驱动包 && 看文档
今日完成
今天主要完成的就是在注册窗口的信息录入状态更改和到后台的验证录入响应
注册输入框的状态onChange进行接收action派发更改state更新每个输入框的内容
发送注册请求,利用redux-thunk先进行服务器请求,再进行dispatch
服务器端的接收请求和数据库的添加
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("stackchat");
dbo.collection("user").insertOne(user, function(err, res) {
if (err) throw err;
console.log("insert success");
});
});
}
Node.js实现PC端类微信聊天软件(三)的更多相关文章
- Node.js实现PC端类微信聊天软件(四)
Github StackChat 学习回顾 React和Electron结合 TypeError: fs.existsSync is not a function 在React组件里引入electro ...
- Node.js实现PC端类微信聊天软件(一)
Github StackChat 技术栈 写这个软件StackChat的主要目的是巩固练习Node和对React的实践,也是为了学习东西,所以选用了这些自己还没在项目里使用过的技术,边学变写 Elec ...
- 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 -- ...
- 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,大为受 ...
随机推荐
- 2019牛客暑期多校训练营(第五场)B:generator 1 (10进制快速幂)
题意:给定x0,x1,a,b,满足xi=a*xi-1+b*xi-2: 求xn,n<10^(10^6): 思路:10进制快速幂裸题.降幂来写好像也是可以的,但是循环节不是phi(mod),所以数学 ...
- 利用requests库访问360主页20次
一.安装 1.cmd进入命令行界面 2.直接输入 D:切换至D盘(python所在路径), 然后cd python下的scripts所在路径,切换至pip所在位置 3.pip install req ...
- hive中时间操作(一)
转:https://blog.csdn.net/u012474716/article/details/78925319/ hive中常用的时间为时间戳和日期格式之间的转换 常用的函数为: to_dat ...
- 开源项目(9-0)综述--基于深度学习的目标跟踪sort与deep-sort
基于深度学习的目标跟踪sort与deep-sort https://github.com/Ewenwan/MVision/tree/master/3D_Object_Detection/Object_ ...
- uni-app下拉刷新加载刷新数据
onPullDownRefresh监听该页面用户下拉刷新事件需要在 pages.json 里开启 enablePullDownRefresh "globalStyle": { } ...
- pandas把'<m8[ns]'类型转换为int类型进行运算
工作中经常碰到两列数据为date类型,当这两列数据相减或者相加时,得到天数,当运用这个值进行运算会报错:ufunc true_divide cannot use operands with types ...
- WPF——OXY绘图_old
plotModel = new PlotModel() { Title = "数据统计", LegendTitle = "Max:红色,Min:黄色", Leg ...
- 【Gamma】Scrum Meeting8
目录 写在前面 进度情况 任务进度表 燃尽图 照片 写在前面 例会时间:6.6 22:30-22:45 例会地点:微信群语音通话 代码进度记录github在这里 进度情况 任务进度表 注:点击链接跳转 ...
- RNN 一对一
https://blog.csdn.net/owenfy/article/details/80022586
- numpy的文件存储.npy .npz 文件详解
Numpy能够读写磁盘上的文本数据或二进制数据. 将数组以二进制格式保存到磁盘 np.load和np.save是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 ...