javascript - "dispatch"未捕获类型错误 React-Redux

标签 javascript reactjs redux

简单的背景知识,我正在使用旧版本的 this 开发 React-Redux 应用程序。锅炉板项目。

但是,它遇到了一些问题,因此我将代码移植到同一样板项目的最新版本(昨天做的)。

这样我之前遇到的问题就解决了。 UI 正在加载,一切看起来都很棒,但是当 Button.onTouchTap() 被触发时,它会抛出如下错误:

Uncaught TypeError this.props.dispatch is not a function

这之前工作正常,没有任何问题,不知道是什么破坏了它。 :(

在我的组件中,我使用装饰器连接到存储,而不是 mapStateToProps 方法(据我所知,这通常是此问题的根源)。

@connect((store) => {
  return {
    param1 : store.myReducer.param1,
    param2 : store.myReducer.param2,
    param3 : store.myReducer.param3,
    param4 : store.myReducer.param4,
  }
})

错误在下面的行抛出:

this.props.dispatch(myAction(this.state.param1, this.state.param2))

我完全困惑了,并且已经被这个问题困扰了很长时间。任何帮助表示赞赏,谢谢! <3

最佳答案

通常认为直接访问组件中的调度函数是一种不好的做法。您应该使用 @connect 装饰器的第二个参数将要分派(dispatch)到组件的 props 的操作映射为简单的回调。

这种模式让你的组件变得愚蠢。它不知道回调是来自 redux 还是来自它的父级或者来自您可以使用的任何其他来源。它减少了组件的粘附性,并使其更易于测试和维护。

我从未使用过 connect 作为装饰器,但我想你可以这样使用它

import { connect } from 'react-redux'
import { myAction } from '/path/to/action/file'

@connect(
  state => ({ param: state.myReducer.myParam }),
  { myAction }
)

const MyComponent = props => {
  const { param, myAction } = props

  return (
    <div>
      <p>{ param }</p>
      <button onClick={ myAction }>Click Me</button>
    </div>
  )
}

export default MyComponent

不良做法解决方案

如果你真的希望你的代码能够正常工作,那么只需连接你的组件并在 props 中为其提供调度函数即可。

import { connect } from 'react-redux'
import { myAction } from '/path/to/action/file'

@connect(
  state => ({ param: state.myReducer.myParam }),
  dispatch => ({ dispatch }),
)

const MyComponent = props => {
  const { param, dispatch } = props

  return (
    <div>
      <p>{ param }</p>
      <button onClick={ () => dispatch(myAction()) }>Click Me</button>
    </div>
  )
}

export default MyComponent

但是,这不应该在现实世界的应用程序中完成,并且应该按照本答案开头所示进行重构。

关于javascript - "dispatch"未捕获类型错误 React-Redux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45488797/

相关文章:

javascript - 如何使用各种参数在 Mongoose 中进行搜索查询?

javascript - $.ajax() 给出 [object HTMLInputElement] 而不是值

javascript - 为什么我不能直接在SetTimeout函数中调用resolve()来处理Promises

javascript - React 16.3+ 从状态变化触发 onChange 的正确方法

javascript - 在 Redux 中将对象转换为数组

javascript - 使用嵌套的对象数组创建多级下拉列表

javascript - 对象作为 React 子对象无效(找到 : [object Promise])

node.js - Heroku 错误代码 : Elifecycle +more unknowns

javascript - 如何修复 "Expected to return a value at the end of arrow function"警告?

javascript - 将中间件应用于单个商店