Search code examples
javascriptreactjsreduxrender-to-string

Uncaught TypeError: Cannot read property 'type' of undefined React/Redux


I am just learning redux/reactjs.And I am trying to do serverside rendering with redux But unfortunately I got this error.Yes there are many answer out there but not working for me. enter image description here

headerReducer.js

import * as type from '../Actions/actionTypes';


const initialState = {
    menuToggle:false,
    singnInToggle:false,
    removeUploadMenu:true,
    uploadPopUp:false
};
export default function toogleReducer(state=initialState,action) {
  switch (action.type){
      case type.NAVBAR_TOGGLE:
          return(
              Object.assign({},state,{menuToggle:action.payload})
          );
      case type.SIGNINPOP_TOGGLE:
          return(
              Object.assign({},state,{singnInToggle:action.payload})
          );
      case type.REMOVEUPLOADMENU:
          return(
              Object.assign({},state,{removeUploadMenu:action.payload})
          );
      case type.TOGGLEUPLOADPOPUP:
          return(
              Object.assign({},state,{uploadPopUp:action.payload})
          );
      case type.TOGGLEUPLOADPOPUPOFF:
          return(
              Object.assign({},state,{uploadPopUp:action.payload})
          )
      default:
          return state
  }
}

headerActions.js

import * as types from './actionTypes';

export function toggleStatus(bool) {
    return{
        type:types.NAVBAR_TOGGLE,
        payload:bool
    }
}
export function toggleSignPop(bool) {
    return{
        type:types.SIGNINPOP_TOGGLE,
        payload:bool
    }
}

export function removeUploadMenu(bool) {
    return{
        type:types.REMOVEUPLOADMENU,
        payload:bool
    }
}

export function toggleUploadPopun(bool) {
    return{
        type:types.TOGGLEUPLOADPOPUP,
        payload:bool
    }
}

reducers/index.js

import {combineReducers} from 'redux';
import toggleReducer from './headerReducer';
import loginStatusReducer from './AuthReducer';
import photoUploadReducer from './photoUploadingReducer';
import notificationReducer from './NotificationReducer';
import supportForUploadReducer from './supportForUploadReducer';

export default combineReducers({
  toggle:toggleReducer,
    logInStatus:loginStatusReducer,
  photoUpload:photoUploadReducer,
  notification:notificationReducer,
  loadedAjax:supportForUploadReducer
});

Solution

  • I suspect your components aren't correctly connected to Redux store. Look at this Dan Abramov's example. You should especially have dispatch used when connecting your actions to Redux store. Example:

    const mapDispatchToProps = (dispatch) => {
      return {
        onTodoClick: (id) => {
          dispatch(toggleTodo(id));
        },
      };
    };