redux调用嵌套函数

时间:2016-01-26 08:31:28

标签: reactjs redux

假设我在以下行为中创建了一个函数:

export default function login(){
  function my_init (){
    // some initialization goes here or some logic
    dispatch(some_actions, response)
  };
  function check_func() {
    console.log("Inside check_func") ------> It is never get printed.. 
    this.my_init()
  }
}

现在我想在我的组件中调用此函数:

class Login extends Component{

    render() {
    const { login, actions } = this.props
    return (
      <div>
        <button onClick={actions.login.check_func}>Click to login</button>
      </div>
    )
  }
}

Login.propTypes = {
  login: PropTypes.array.isRequired,
  actions: PropTypes.object.isRequired
}

我已将dispath和state映射到props。 但是当我点击按钮时,我的动作没有被调用。

需要帮助。

1 个答案:

答案 0 :(得分:0)

问题在于:

export default function login(){
  function my_init (){
    // some initialization goes here or some logic
    dispatch(some_actions, response)
  };
  function check_func() {
    console.log("Inside check_func")
    this.my_init()
  }
}

JavaScript中的函数不是类。最重要的是,在其他函数内定义的函数是自动暴露在父函数之外。为了访问它们,必须从外部函数返回它们。例如:

export default function login(){
  function my_init (){
    // some initialization goes here or some logic
    dispatch(some_actions, response)
  };
  function check_func() {
    console.log("Inside check_func")
    this.my_init()
  } 

  return { my_init, check_func }; 
}

然后要访问它,请使用外部函数的返回值:

<button onClick={actions.login().check_func}>Click to login</button>

但是,考虑到希望如何使用它,您可能只想使用方法导出对象:

export default {
  my_init (){
    // some initialization goes here or some logic
    dispatch(some_actions, response)
  },
  check_func() {
    console.log("Inside check_func")
    this.my_init()
  }
};

这将允许您以当前的方式引用该功能:

<button onClick={actions.login.check_func}>Click to login</button>