首页 > 解决方案 > 反应:帮助理解特定的柯里化用例

问题描述

  <Select 
    onChange={evt => myFunction('KEY', ['ARRAY', 'OF', 'VALUES'])(evt)}

...

 const myFunction = (key, funValues) => {

      return (evt: React.ChangeEvent<HTMLSelectElement>) => {

        const { values } = evt.target;
         if (funValues.find( some condition) ){
           callAPI(key, funValues);
         }
         else{
           callAPI(key, values);
        }
      };
    };

我会把它写成

 onChange={evt => myFunction('KEY', ['ARRAY', 'OF', 'VALUES'], evt)}

我真的没有看到在这里应用柯里化的逻辑是什么,以及它将如何使 a) 这个操作更好和/或 b) 有助于更广泛的好处

也许这有助于上下文,但myFunction在整个代码库中都被调用。有时通过 evt,有时手动。

标签: reactjscurrying

解决方案


创建一个柯里化函数(我猜)是在回调处理程序中避免箭头函数的误解。为了这种误解,有些人将此功能定义为咖喱功能并使用例如:

onChange={myFunction('KEY', ['ARRAY', 'OF', 'VALUES'])}

如您所见,这比您的版本短并且有效。因此,您不必像您一样使用箭头函数并调用它。event再次通过。

有些人认为这避免了在每次渲染中重新创建此功能,但事实并非如此。


推荐阅读