React - Redux connect()() 语法清晰

IT技术 javascript reactjs ecmascript-6 react-router
2021-05-27 00:02:20

我刚刚开始学习 react-redux 并且对 redux 的 connect 函数中指定的语法感到困惑。

根据我的理解,我们定义和调用的普通函数如下:

//function definition
function fun_name(arg){
    //do some operations
}


// function calling
fun_name('my_argument');

在react中发现了一些有趣的线

export default connect(mapStateToProps, mapDispatchToProps)('SomeComponentName');

但是这里上面的行调用带有两个参数 mapStateToProps,mapDispatchToProps 的连接函数。后者定义了 ('SomeComponentName')

有谁知道“connect()()”是一种什么样的语法或者它是 export 的一部分?

3个回答

在 JS 中称为柯里化

柯里化是一种函数转换,它将函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)。

柯里化不会调用函数。它只是改变它。

来源https://javascript.info/currying-partials

例如

function outer(){
  return inner
}

function inner(){
 console.log("I got called")
}

outer()()

基本上,connect 是一个返回另一个方法的方法。

因此,当您这样做时connect(),它会调用 connect 方法并返回一个方法,该方法()在您这样做时由第二个调用connect()()

connect()函数返回另一个需要调用的函数,并且需要一个作为组件的参数。

正如connect()退货文件所述:

connect() 的返回是一个包装器函数,它接受您的组件并返回一个带有它注入的附加props的包装器组件。在大多数情况下,包装函数会马上叫,而不被保存在一个临时变量:export default connect(mapState, mapDispatch)(Login)

您可以考虑如下代码片段:

const connectedFunction = connect(mapStateToProps, mapDispatchToProps);
export default connectedFunction(SomeComponentName);

建议阅读connect()概述:https : //react-redux.js.org/api/connect#overview

我希望这有帮助!