React-redux useDispatch()未捕获的TypeError

时间:2019-07-30 18:10:51

标签: reactjs redux react-redux react-hooks

我正在尝试创建一个简单的组件来使用React Redux钩子useDispatch调度动作-我遇到了一个错误。我已将组件缩小到发生错误的位置。调用useDispatch函数时会发生这种情况。

import { useDispatch } from 'react-redux'

const MyComp = () => {
  useDispatch()
  return null
}

export default MyComp

这是我在开发控制台中看到的错误:

Uncaught TypeError: Object(...) is not a function
    at MyComp (MyComp.js?cc4c:4)
    at renderWithHooks (react-dom.development.js?d018:12938)
    at mountIndeterminateComponent (react-dom.development.js?d018:15020)
    at beginWork (react-dom.development.js?d018:15625)
    at performUnitOfWork (react-dom.development.js?d018:19312)
    at workLoop (react-dom.development.js?d018:19352)
    at HTMLUnknownElement.callCallback (react-dom.development.js?d018:149)
    at Object.invokeGuardedCallbackDev (react-dom.development.js?d018:199)
    at invokeGuardedCallback (react-dom.development.js?d018:256)
    at replayUnitOfWork (react-dom.development.js?d018:18578)

我将其进一步缩小,因此反应树中没有父母。

const store = configureStore()

ReactDOM.render(
  <Provider store={store}>
    <MyComp />
  </Provider>,
  document.getElementById('root')
)

模块版本

    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-redux": "^7.1.0",

6 个答案:

答案 0 :(得分:2)

就我而言,我正在这样做:

import { useDispatch } from 'react'

代替:

import { useDispatch } from 'react-redux'

?‍♂️

答案 1 :(得分:1)

我让它工作了-我认为只需停止,构建,然后重新启动该应用即可。我没想到useDispatch会需要这个,所以我无法解释为什么这样做会有所帮助。

注意事项-我确实尝试过useSelector,但确实成功了,从react-redux导入后,我可以将useSelector变量输出到控制台(useDispatch的console.log未定义)。我可以说当时我使用的是正确版本的React,这可能是我系统的问题。

因此,如果您遇到类似的问题。尝试完全重新启动应用程序。确认您正在加载正确版本的react。

答案 2 :(得分:0)

我正在使用@reduxjs/toolkit,并假定已经安装了react-redux

答案 3 :(得分:0)

我有一个类似的问题,解决方法是更新“ react-redux”。 最初的package.json就像这样:

"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-redux": "^6.0.1",

安装react-redux@7.2.0

后问题消失了

答案 4 :(得分:0)

升级
"react-redux": "6.0.1",

"react-redux": "7.2.0",

为我修复了

运行npm outdated进行概述,然后运行npm update react-redux更新redux

答案 5 :(得分:0)

我使用 "@reduxjs/toolkit": "^1.5.0", 我通过删除“react-redux”来解决这个问题:“^7.2.2”