鍍金池/ 問答/HTML/ redux兩個reducer之間的狀態(tài)無法傳遞?求解,詳細(xì)請看圖,怎么將prev

redux兩個reducer之間的狀態(tài)無法傳遞?求解,詳細(xì)請看圖,怎么將prev state傳遞到next state

我有兩個reduer,一個負(fù)責(zé)用戶登陸的相關(guān)state :loginReducer.js
另一個負(fù)責(zé)登錄后的socket聊天:chatReducer.js,
圖片描述

登陸成功后可以看到loginReducer里面的userLogin已經(jīng)發(fā)生了變化,此時頁面進(jìn)入了聊天頁面,但是問題來了,只要發(fā)出任意一個chatReducer的action,loginReducer里面的信息就會丟失,變成初始狀態(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:'小伙子,不錯啊'}],
        loadMessageType:'current',//是否當(dāng)前聊天或者歷史記錄
        messageType:'current',//當(dāng)前對話框
        messages:{
            current:[
                {sender:'admin',msg:'第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息第一條測試消息',sendTime:'2018-3-15',receiver:[],receiveTime:''},
                {sender:'李四',msg:'測試測試測試',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;

請問各位有遇到相同的情況嗎?怎么解決的,求教。。。

回答
編輯回答
陪她鬧

你用什么 來保存的state

2017年11月24日 11:27
編輯回答
呆萌傻

看現(xiàn)象可能是你 loginReducer 寫的有問題,你貼一下兩個 reducer 的代碼吧。

2017年4月3日 18:44
編輯回答
礙你眼

這里默認(rèn)返回的是state,不是initStateclipboard.png

2018年6月25日 06:15