Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 没有部分应用的Curry函数?_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 没有部分应用的Curry函数?

Javascript 没有部分应用的Curry函数?,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,下面是关于ReactJS中firebase身份验证的教程。在代码中,我偶然发现了这样的函数: const byPropKey = (propertyName, value) => () => ({ [propertyName]: value, }); {event => this.setState({ username: event.target.value })} 我想这个函数用于设置React组件的状态。它是这样使用的: <input value=

下面是关于ReactJS中firebase身份验证的教程。在代码中,我偶然发现了这样的函数:

const byPropKey = (propertyName, value) => () => ({
    [propertyName]: value,
});
{event => this.setState({ username: event.target.value })}
我想这个函数用于设置React组件的状态。它是这样使用的:

<input
    value={username}
    onChange={event => this.setState(byPropKey('username', event.target.value))}
    type="text"
    placeholder="Full Name"
/>
this.setState(byPropKey('username',event.target.value))}
type=“text”
占位符=“全名”
/>
我对React、JavaScript、ES6和函数式编程都是新手,所以这让我很困惑。我知道双箭头表示一个curried函数,它允许部分应用该函数。然而,在这种情况下,我看不出这在这种情况下是如何使用的

以下是我所指的教程:
您误解了双箭头。这只是创建了一个函数,不一定是一个curry或partial函数

例如:

//只是一个函数
让doSomething=()=>console.log(“做了某事”)
//叫它
doSomething()
函数用作映射状态的助手,并返回如下结果:

{ "statePiceName": value }
设定你的状态

没有此功能时的相同行为:

const byPropKey = (propertyName, value) => () => ({
    [propertyName]: value,
});
{event => this.setState({ username: event.target.value })}
您也可以只
console.log(byPropKey('key','customValue'))
并查看其工作原理

我看不出这在这种情况下是如何使用的

教程作者之所以使用该函数,是因为
setState
。通过函数可以访问以前的状态和道具

在您提供的示例中,教程作者没有使用部分应用程序,因此没有利用对先前状态和道具的访问。因此,在这种特定的情况下,一个非通用的实现(将一个对象传递给setState)就可以了

但是,如果要添加到本教程的代码库中,未来的代码可能需要
byPropKey
来访问prevState和props:

const byPropKey = (propertyName, value) => (prevState, props) => {
    //... do something with prevState and props

    return {
        [propertyName]: value,
    }
};

。。。这可能就是教程作者编写函数curry的原因。

我将在20-30分钟内回答这个问题。这只是一个简单的类比,byPropKey返回一个返回对象的函数。setState需要一个函数作为返回对象的参数。这与函数式编程无关。或者咖喱。VTC不清楚。@Mark_M是的,但不清楚这是否与此处相关,或者OP到底混淆了什么。我仍然看不到任何与FP的关系,除了那个非常脆弱的关系。如果你想重新添加FP标记,我不会再删除它,这不值得争论。curry和partial application都是。我不认为在操作端有任何关于箭头函数概念的混淆。这肯定是一个curry函数,他/她知道使用arrow函数时需要的语法。@Andrew OP的代码中没有curry函数。@JaredSmith仔细查看。这是两个串联的箭头功能。使用该语法并尝试和
console.log
。只调用一次的东西
d=()=>()=>console.log('d')
@Andrew我认为这是一个关于咖喱定义的语义论点。对我来说,你的例子只是一个高阶函数。咖喱涉及到驳斥论点。请看上面的编辑。@Mark\M现在我想起来了,我同意你的看法。我的错误。这确实回答了问题,但我还是有点困惑。首先,我如何调用这个函数?第二,为什么不改用未删节的形式呢?这似乎只会增加不必要的复杂性。