Javascript 如何重构这个函数?

Javascript 如何重构这个函数?,javascript,reactjs,Javascript,Reactjs,我有两个函数用于向端点添加/删除数据。我目前有两个函数,一个用于添加数据,另一个用于删除数据 const addMultipleAuthorities = async () => { const postMultipleAuthoritiesData = { sid: selectedPerson, authorities: selectedAuth, action: 'add' } console.log(postMultip

我有两个函数用于向端点添加/删除数据。我目前有两个函数,一个用于添加数据,另一个用于删除数据

 const addMultipleAuthorities = async () => {
    const postMultipleAuthoritiesData = {
      sid: selectedPerson,
      authorities: selectedAuth,
      action: 'add'
    }
    console.log(postMultipleAuthoritiesData);
  }

  const removeMultipleAuthorities = async () => {
    const removeMultipleAuthoritiesData = {
      sId: selectedPerson,
      authorities: selectedAuth,
      action: 'remove'
    }
    console.log(removeMultipleAuthoritiesData)
  }
这两个都是在单独的按钮上调用的…我想知道如何用一个函数生成代码,因为我似乎在重复我自己

下面是调用函数的两个按钮

 <Button
        text='Add Authorities'
        className='Button Dark Main'
        onClick={addMultipleAuthorities}
 />



 <Button
         text='Remove Authorities'
          className='Button Dark Main'
          onClick={removeMultipleAuthorities}
     />

您可以创建一个函数,在给定
操作的情况下,该函数返回一个记录对象的函数:

const makeClickHandler = action => () => {
    const data = {
      sid: selectedPerson,
      authorities: selectedAuth,
      action,
    };
    console.log(data);
};

一种可能性是咖喱(他们的答案中有什么特定的性能)

另一种可能是在处理程序中使用的按钮上设置属性:

在本文中,我使用了一个(任意数据-*属性),因为它们对于这类事情非常有用

const clickHandler = async (e) => {
    const action = e.target.dataset.action;
    const removeMultipleAuthoritiesData = {
      sId: selectedPerson,
      authorities: selectedAuth,
      action
    }
    console.log(removeMultipleAuthoritiesData)
  }


Hey@certainPerformance,谢谢。你能把我链接到一个你使用过makeClickHandler=action=()=>的资源吗。从来没有新的你可以这样做!谢谢你的资源?你是什么意思?对不起,在我打字的时候按回车键,刚刚更新了
makeClickHandler
用于
onClick
处理程序-参见答案的下半部分。这里有几个链接,提供了一些有关函数转换的信息:本质上,它只是让一个函数返回另一个函数,并使用闭包保持对变量的访问。
const clickHandler = async (e) => {
    const action = e.target.dataset.action;
    const removeMultipleAuthoritiesData = {
      sId: selectedPerson,
      authorities: selectedAuth,
      action
    }
    console.log(removeMultipleAuthoritiesData)
  }
 <Button
        text='Add Authorities'
        className='Button Dark Main'
        data-action="add"
        onClick={clickHandler}
 />



 <Button
         text='Remove Authorities'
          className='Button Dark Main'
          data-action="remove"
          onClick={clickHandler}
     />