javascript - 在 Redux mapDispatchToProps 中使用组件状态或 props

标签 javascript reactjs redux react-redux

我是一个 Redux/React 初学者,仍在尝试将我的知识包裹在 Redux 生态系统中的 dispatch 组件中。到目前为止,我在组件中发出 Redux 操作的方式是直接调用组件 props 的 dispatch() 函数:

const mapStateToProps = (state) => {
  return {searchType: state.searchType}
}

export default connect(mapStateToProps)(SearchForm);

然后,我有一个与 onClick 事件绑定(bind)的处理函数:

  handleOptionChange(changeEvent) {

    this.setState({selectedOption: changeEvent.target.value});
    this.props.dispatch(setSearchType(this.state.selectedOption));
  }

但是,我一直在尝试实现mapDispatchToProps。这个SO post描述了使用 mapDispatchToProps 而不是简单地使用 this.props.dispatch 的一些好处。但是,我一直在努力寻找一种将组件 Prop 或状态集成到 mapDispatchToProps 中的方法。我想写这样的东西:

const mapDispatchToProps = (dispatch) => {
  return {
    setSearchType : dispatch(setSearchType(this.props.option))
  }
}

this.props.option 是一个向下传递的属性,用于标识为特定按钮(在此为单选按钮)选择的配置。然后只需调用:

  handleOptionChange(changeEvent) {

    this.setState({selectedOption: changeEvent.target.value});
    this.props.setSearchType(); // <--- this line is new
  }

但是,显然,mapDispatchToProps 中的this 未定义,因为该函数是在我的组件范围之外定义的。在我引用的 SO 帖子以及教程 Material 和文档中,mapDispatchToProps 始终发送不依赖于组件状态/属性的操作。将组件的状态/属性引入 mapDispatchToProps 的最佳实践是什么?

最佳答案

只需将调度程序定义为接受 props 作为参数的函数:

const mapDispatchToProps = (dispatch) => {
  return {
    setSearchType : option => dispatch(setSearchType(option))
  }
}

然后调用时传递参数:

this.props.setSearchType(this.props.option)

在每次渲染时将 onClick 绑定(bind)到函数时请注意性能问题。请参阅this文章了解更多信息。

关于javascript - 在 Redux mapDispatchToProps 中使用组件状态或 props,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49655223/

相关文章:

javascript - 组合两个书签

reactjs - 嵌套通量数据

javascript - 无法刺激模态 : React-Redux 中输入的变化

typescript - 在类型定义文件中定义类型与在普通类型文件中定义类型的好处

javascript - 浏览器没有重定向,但 url 正在改变

javascript - 如何从给定的外部url获取数据 session id和所有内容,而不是从 Angular 6中的我的应用程序(路由)获取

带有数组的 Javascript/jQuery 动画

javascript - 使用map遍历两个数组

reactjs - 添加 slimscroll 到reactJS

javascript - React redux 组件之间共享对象