react-redux useSelector告诉“未捕获的TypeError:Object(...)不是函数”

时间:2020-03-30 18:27:59

标签: react-redux react-hooks

我在React挂钩中还很陌生,我试图用connectmapStateToProps替换useSelectoruseDispatch等。这就是我所拥有的:

import React from 'react';
import { useSelector } from 'react-redux';

function MyComponent(props) {
   const data = useSelector(state => state.app.loadingData);

   return (
      <div>
        {data}
      </div>
   );
}

根据https://react-redux.js.org/api/hooks,其中写得很好。这是我的Redux DevTools控制台:

enter image description here

因此,app存在于redux状态树中,loadingData也存在。无论如何,我的浏览器控制台都指向const data = useSelector(state => state.app.loadingData);,叫我这是一个错误:

未捕获的TypeError:Object(...)不是函数

那么,我在做错什么还是在这里想念什么?

4 个答案:

答案 0 :(得分:17)

我遇到了同样的错误,我发现我错过了导入的“useSelector”。我是从 react 而不是 redux 导入的。 :)

错误:

import React, { useState, useEffect, useSelector } from "react";

好方法:

import { useDispatch, useSelector } from "react-redux";

答案 1 :(得分:3)

检查您的react-redux版本,从7.1.0以后的版本中提供userSelector函数,以更新到上一次运行的版本:

yarn add react-redux

答案 2 :(得分:1)

解决方案:

也许不是最好的方法,还是最漂亮的方法,但对我来说是可行的解决方案:

const data = useSelector(state => state.getIn(['app', 'loadingData']);

希望这会有所帮助。请,如果可以改进此解决方案,则redux团队可能会在此处提供帮助。

答案 3 :(得分:0)

也许..没有Reducer状态的initialState?

initialState匹配数据深度

我遇到了同样的错误,并像这样解决了它

const initialState = { loadingData: null };
    
export default function (state = initialState, action) {
  switch (action.type) {
    ...
  }   
}

https://redux.js.org/recipes/structuring-reducers/basic-reducer-structure