【问题标题】:react-redux useSelector is telling "Uncaught TypeError: Object(...) is not a function"react-redux useSelector 告诉“Uncaught TypeError: Object(...) is not a function”
【发布时间】:2020-07-11 04:59:27
【问题描述】:

我是 React hooks 的新手,我正在尝试用 useSelectoruseDispatch 替换 connectmapStateToProps 等等。这就是我所拥有的:

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 控制台:

所以,app 存在于 redux 状态树中,loadingData 也存在。不管怎样,我的浏览器控制台指向const data = useSelector(state =&gt; state.app.loadingData); 大喊我有这个错误:

Uncaught TypeError: Object(...) is not a function

那么,我做错了什么或者我在这里遗漏了什么?

【问题讨论】:

  • const data = useSelector(state => state.app.loadingData);
  • 这是一个错误的输入...现在已修复。错误仍然存​​在。
  • 也许你的错误是另一行代码。您是否尝试评论代码以查看会发生什么?
  • @AliTorki,如果我评论那行代码就像一个魅力......
  • 检查导出函数或...并使用npm update更新反应库

标签: react-redux react-hooks


【解决方案1】:

解决方案:

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

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

希望这会有所帮助。拜托,如果可以改进此解决方案,redux 团队可能会在这里提供指导。

【讨论】:

    【解决方案2】:

    检查你的 react-redux 版本,userSelector 函数从 7.1.0 之后的版本可用,以更新到最后一个版本运行:

    yarn add react-redux
    

    【讨论】:

      【解决方案3】:

      也许..没有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

      【讨论】:

        【解决方案4】:

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

        错误:

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

        好方法:

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

        【讨论】:

        • 我犯了这个错误导致上述错误,非常感谢