Skip to main content

TypeError: Undefined: Redux 4

Redux 4 > createStore > compose

The Error

            TypeError: Cannot read property 'apply' of undefined
            [node_modules/redux/es/redux.js:523]
        

The Problem and Solution

If you've gone through a tutorial in which they suggest adding the Redux Dev Tools in your store.js like this:

            window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
        
But they're using it inside of a compose(), you could receive a Type Error for an undefined when the extension is not enabled (or present). The correct way to implement the Redux Dev Tools within a compose is as follows:

            window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
        
I learned this the hard way, and was eventually brought rescue from GitHub user [zalmoxisus].
zalmoxisus also references the docs for this: [1.2 Advanced store setup (middleware and enhancers)]

Code Extract from [store.js]

      compose(
        applyMiddleware(...middleware),
        window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
        window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
      )
    

A Little Error Verbosity

Comments

Popular posts from this blog

Memory Recall: An Interview Thought

At least a few hundred JavaScript algorithm challenges after taking Harvard's CS50 course, I realized that I use (my brain uses) a "trie" type of knowledge retrieval approach, as compared to someone who can do more of a "dictionary" type of memory lookup. That is, my recall works better when I'm creating and analyzing code (e.g., surrounded by context).

For instance, if I come across a need for the "spread operator", I may need to look up a quick example for syntax reference, but I know I can use it and I will put it to use. Or I may devise another method that may work out better long term, considering the potential future expansion of that particular code. Or I may just prefer another approach (e.g., I prefer `slice()` and `concat()` for copying arrays (but would always go with whatever coding guide I'm working with, if any)).

Anecdotal disclaimer: Using unfamiliar functionality can take me a half dozen trial and error attempts, but I always …