Reputation: 3300
I am quite new in React hooks, I am trying to replace the connect
, mapStateToProps
and so forth with useSelector
, useDispatch
. This is what I have:
import React from 'react';
import { useSelector } from 'react-redux';
function MyComponent(props) {
const data = useSelector(state => state.app.loadingData);
return (
<div>
{data}
</div>
);
}
Which, according to https://react-redux.js.org/api/hooks is well written. This is my Redux DevTools console:
So, app
exists in the redux state tree and loadingData
exists as well. Regardless of that, my browsers console points to const data = useSelector(state => state.app.loadingData);
yelling me that there is this error:
Uncaught TypeError: Object(...) is not a function
So, what am I doing wrong or what am I missing here?
Upvotes: 6
Views: 12404
Reputation: 1480
You're importing useSelector from react instead of react-redux.
Do:
import { useDispatch, useSelector } from "react-redux";
Upvotes: 0
Reputation: 401
i had the same error and i figured out that i had miss-imported "useSelector". I was imported it from react instead of redux. :)
The mistake :
import React, { useState, useEffect, useSelector } from "react";
The good way :
import { useDispatch, useSelector } from "react-redux";
Upvotes: 40
Reputation: 1
Perhaps.. no initialState of Reducer state?
initialState match the data depth
I got the same error and solved it like this
const initialState = { loadingData: null };
export default function (state = initialState, action) {
switch (action.type) {
...
}
}
https://redux.js.org/recipes/structuring-reducers/basic-reducer-structure
Upvotes: 0
Reputation: 377
Check your react-redux version, the userSelector function its available from versions great then 7.1.0, for to update to the last version run:
yarn add react-redux
Upvotes: 11
Reputation: 3300
Solution:
Maybe not the best way, or the prettiest way, but working solution for me:
const data = useSelector(state => state.getIn(['app', 'loadingData']);
Hope this could be helpful. Please, the redux team might be providing light here if this solution could be improved.
Upvotes: 1