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}
/>