在Redux中调度动作的正确方法

时间:2018-11-21 17:20:32

标签: reactjs react-native redux react-redux

我的目标是调度一个动作,以便我可以传递状态对象。

import { addUser } from './actions' //action creator

this.state = {
  person: {
   name: '',
   age: 0,
  },
  isLoading: true,
}

//本地功能。

addNewUser = () => {
  //dispatches conditionally so the local func..
  this.props.addUser(this.state.person);
}

//调度

mapDispatchToProps = dispatch => ({
  addUser: (person) => dispatch(addUser(person)),
})
错误显然在我的mapDispatch上(以错误的方式评估状态)。我该如何解决?(或者有什么更好的方法,但是必须使用动作创建者) 提前欣赏。

2 个答案:

答案 0 :(得分:0)

假设您的操作正确无误。

const mapDispatchToProps = (dispatch) => {
  return {
    addUser: (person) => {
      dispatch(addUser(person))
    },
  }
}

我相信您只在mapDispatchToProps上缺少返回{}

答案 1 :(得分:0)

我发现将您的操作连接到导出并调用this.props.addUser更简单,因为默认情况下,它无需执行mapDispatchToProps就可以为它分配调度

export default connect(
    mapStateToProps, 
    {action1, action2, addUser})(User)

那么您仍然可以使用:

addNewUser = () => {
  this.props.addUser(this.state.person);
}

,然后在操作或减速器本身(取决于您对流量的偏好)内进行其余操作,例如:

export const addUser = user => ({
    type: ADD_USER_SUCCESS,
    payload: {user}
})

这确实更有用,因为在组件外执行逻辑更具可伸缩性和可管理性。如果您有10个动作,它很快就会失控,并且开始混合使用不同类型的逻辑。