有没有一种技术可以使用它调用的函数的参数来调用函数?

atk*_*yla 2 javascript ecmascript-6

正如你所看到的,我现在正在接受previousResult并且每次都mutationResult将它们传递给它们deletePostUpdateQuery.我想知道是否有一个更清洁的方式来抛出所有的论点(this function args) => deletePostUpdateQuery(...this function args, key).


updateQueries: {
  NewPosts: (previousResult, { mutationResult }) => deletePostUpdateQuery(previousResult, mutationResult, 'newPosts'),
  HotPosts: (previousResult, { mutationResult }) => deletePostUpdateQuery(previousResult, mutationResult, 'hotPosts'),
  NotificationPosts: (previousResult, { mutationResult }) => deletePostUpdateQuery(previousResult, mutationResult, 'notificationPosts'),
  OwnPosts: (previousResult, { mutationResult }) => deletePostUpdateQuery(previousResult, mutationResult, 'ownPosts'),
},
Run Code Online (Sandbox Code Playgroud)
const deletePostUpdateQuery = (previousResult, mutationResult, key) => {
  const deletedPostEdgeIndex = _.findIndex(previousResult[key].feed.edges, {
    node: {
      id: mutationResult.data.deletePost.id,
    },
  });

  const result = update(previousResult, {
    [key]: {
      feed: {
        edges: {
          $splice: [[deletedPostEdgeIndex, 1]],
        },
      },
    },
  });

  return result;
};
Run Code Online (Sandbox Code Playgroud)

Mat*_*Way 6

你可以创建一个包装调用函数.例如:

const callDPUQ = key => (previousResult, { mutationResult }) => 
  deletePostUpdateQuery(previousResult, mutationResult, key)
Run Code Online (Sandbox Code Playgroud)

然后你可以这样写你的更新对象:

updateQueries: {
  NewPosts: callDPUQ('newPosts'),
  HotPosts: callDPUQ('hotPosts'),
  NotificationPosts: callDPUQ('notificationPosts'),
  OwnPosts: callDPUQ('ownPosts')
}
Run Code Online (Sandbox Code Playgroud)

为了解释,调用callDPUQ返回一个函数本身,它利用传入的密钥.