redux两个reducer之间的状态无法传递?求解,详细请看图,怎么将prev state传递到next state

我有两个reduer,一个负责用户登陆的相关state :loginReducer.js
另一个负责登录后的socket聊天:chatReducer.js,
图片描述

登陆成功后可以看到loginReducer里面的userLogin已经发生了变化,此时页面进入了聊天页面,但是问题来了,只要发出任意一个chatReducer的action,loginReducer里面的信息就会丢失,变成初始状态的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',//是否当前聊天或者历史记录
        messageType:'current',//当前对话框
        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: '当前信息',
          }, {
            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;

请问各位有遇到相同的情况吗?怎么解决的,求教。。。

阅读 2.6k
3 个回答

看现象可能是你 loginReducer 写的有问题,你贴一下两个 reducer 的代码吧。

你用什么 来保存的state

这里默认返回的是state,不是initStateclipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题