【问题标题】:React/Javascript: Pass Function with optional Parameter as PropReact/Javascript:以可选参数作为道具传递函数
【发布时间】:2020-11-09 09:27:17
【问题描述】:

我想将在 onClick 事件上调用的函数包装到另一个函数中,该函数在执行传递的函数之前执行一些附加操作。 因此,我想要一个函数,它接受一个函数作为带有可选参数的道具。

类似:

import React from "react";

import action from ...

export default class C extends React.Component {
  constructor(props) {
    super(props);
  }

  handleClickLinkOne(shift) {
    // do Stuff
  }
  
  handleClickLinkTwo(){
    // do Stuff
  }

  render() {
  
    return (
        <React.Fragment>
            <a
              className={...}
              onClick={(e) => action(this.handleClickLinkOne(e.shiftKey))}
            >
            CAPTION
            </a>
            <a
              className={...}
              onClick={() => action(this.handleClickLinkTwo())}
            >
            CAPTION TWO
            </a>
        <React.Fragment>
    );
  }
}


function action(prop){

// do stuff

prop();
}

我的问题是我不知道如何处理可选的“e”参数。

【问题讨论】:

    标签: javascript reactjs function


    【解决方案1】:

    不确定我是否理解正确,但您应该将您的操作重构为类似的内容。

    export function action(cb) {
     ...
     return function(e) {
      ...
      cb(e);
     }
    }
    
    import React from "react";
    
    import action from ...
    
    export default class C extends React.Component {
      constructor(props) {
        super(props);
      }
    
      handleClickLinkOne(e) {
        // do Stuff
        // e.shiftKey can be used here
      }
      
      handleClickLinkTwo(){
        // do Stuff
      }
    
      render() {
      
        return (
            <React.Fragment>
                <a
                  className={...}
                  onClick={action(this.handleClickLinkOne)}
                >
                CAPTION
                </a>
                <a
                  className={...}
                  onClick={action(this.handleClickLinkTwo)}
                >
                CAPTION TWO
                </a>
            <React.Fragment>
        );
      }
    }
    

    【讨论】:

    • 感谢您的回复。我想你稍微误解了我的问题。我想调用传递的函数,但是如何处理可选参数?您将如何在示例中调用该函数?正是这部分“//你可以在这里调用你的回调”对我来说很有趣:)
    • 你用()调用一个函数,所以根据你对传递给动作的函数的期望,你可以调用cb(e)cb(e.shiftKey)cb()
    • 是的,但是我如何动态地决定呢?我想在这两种情况下都使用 action()-Function。首先应该调用 cb(e.shiftKey) 和第二个 cb()。
    • @mlnskr 我已经编辑了我的答案,以便更清楚
    • 您的回答并没有完全解决我最初的问题,但是我设法用您的回答解决了我的问题。谢谢!
    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2019-03-16
    相关资源
    最近更新 更多