react-redux useSelector 告诉“Uncaught TypeError: Object(...) is not a function”

ass*_*ler 4 react-redux react-hooks

我很新的阵营挂钩,我想更换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>
   );
}
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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

未捕获的类型错误:Object(...) 不是函数

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

小智 23

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

错误 :

import React, { useState, useEffect, useSelector } from "react";
Run Code Online (Sandbox Code Playgroud)

好办法:

import { useDispatch, useSelector } from "react-redux";
Run Code Online (Sandbox Code Playgroud)


小智 7

检查您的 react-redux 版本,userSelector 函数可从 7.1.0 版本中获得,以更新到最后运行的版本:

yarn add react-redux
Run Code Online (Sandbox Code Playgroud)


ass*_*ler 1

解决方案:

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

const data = useSelector(state => state.getIn(['app', 'loadingData']);
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助。如果这个解决方案可以得到改进,redux 团队可能会在这里提供帮助。