我有兩個(gè)reduer,一個(gè)負(fù)責(zé)用戶登陸的相關(guān)state :loginReducer.js
另一個(gè)負(fù)責(zé)登錄后的socket聊天:chatReducer.js,
登陸成功后可以看到loginReducer里面的userLogin已經(jīng)發(fā)生了變化,此時(shí)頁面進(jìn)入了聊天頁面,但是問題來了,只要發(fā)出任意一個(gè)chatReducer的action,loginReducer里面的信息就會(huì)丟失,變成初始狀態(tài)的initState,
如下圖:
loginReducer.js
const initState={
islogining:false,
loginUser:{
name:'',
messagesUnRead:[],
},
loginSuccess:false,
isRegisterNewUser:false } function loginReducer(state=initState, action={}) {
switch (action.type) {
case 'REGISTERING_NEWUSER':
return Object.assign({},state,{isRegisterNewUser:true})
case 'REGISTERING_NEWUSER_SUCCESS':
return Object.assign({},state,{isRegisterNewUser:true})
case 'REGISTERING_NEWUSER_FAILURE':
return Object.assign({},state,{isRegisterNewUser:true})
case 'FETCHING_PEOPLE':
return Object.assign({},state,{islogining:true})
case 'FETCHING_PEOPLE_SUCCESS':
console.log(action.data)
return Object.assign({},state,{loginUser:action.data,islogining:false,loginSuccess:true})
case 'FETCHING_PEOPLE_FAILURE':
return Object.assign({},state,{islogining:false})
default:
return initState
} }
export default loginReducer;
chatReducer.js
users:[//用戶列表
{ name:'admin',isOnline:false,profilePhoto:logo,lastMessage:'你說啥??'},
{ name:'張三',isOnline:true,profilePhoto:logo,lastMessage:'好的,我知道了'},
{ name:'李四',isOnline:false,profilePhoto:logo,lastMessage:'好的,我知道了'},
{ name:'王五',isOnline:false,profilePhoto:logo,lastMessage:'小伙子,不錯(cuò)啊'}],
loadMessageType:'current',//是否當(dāng)前聊天或者歷史記錄
messageType:'current',//當(dāng)前對(duì)話框
messages:{
current:[
{sender:'admin',msg:'第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息第一條測(cè)試消息',sendTime:'2018-3-15',receiver:[],receiveTime:''},
{sender:'李四',msg:'測(cè)試測(cè)試測(cè)試',sendTime:'2018-3-16',receiver:[],receiveTime:''}
],
history:[]
},
newMessage:'',//正在輸入的新消息,
tabListNoTitle : [{
key: 'current',
tab: '當(dāng)前信息',
}, {
key: 'history',
tab: '歷史記錄',
}, ],
currentUser:{}, } function chatReducer(state=initState, action={}) {
switch (action.type) {
case 'LOADING_HISTORY_MESSAGE':
return Object.assign({},state,{loadMessageType:'history'})
case 'LOADING_HISTORY_MESSAGE_SUCCESS':
let messages=Object.assign({},state.messages)
let newMessage=Object.assign({},messages,{history:action.messages})
return Object.assign({},state,{messages:newMessage})
case 'LOAD_CURRENT_MESSAGE':
return Object.assign({},state,{loadMessageType:'current'})
case 'NEW_MESSAGE_CHANGE':
return Object.assign({},state,{newMessage:action.msg})
case 'GET_NEW_MESSAGE':
messages=Object.assign({},state.messages)
messages.current.push(action.msg)
newMessage=Object.assign({},messages)
return Object.assign({},state,{messages:newMessage})
case 'SET_CURRENT_USER':
return Object.assign({},state,{currentUser:action.user})
default:
return initState
} }
export default chatReducer; ```
reducer.js
import {combineReducers} from 'redux';
import loginReducer from './reducers/loginReducer'
import chatReducer from './reducers/chatReducer'
export default combineReducers({
loginReducer,chatReducer
})
store.js
import { createStore, applyMiddleware } from 'redux';
import reducer from './reducer';
import logger from 'redux-logger';
import middlePromise from 'redux-promise';
import thunkMiddleware from 'redux-thunk';
const store = createStore(reducer,applyMiddleware(thunkMiddleware,middlePromise,logger));
export default store;
請(qǐng)問各位有遇到相同的情況嗎?怎么解決的,求教。。。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。