有关mapStateToProps、mapDispatchToProps的问题
来源:9-10 【RESTful进阶(选修)】Richardson成熟度模型与HATOAS

莜紫兮
2021-11-18
1、老师,connect
函数接收两个参数mapStateToProps
和mapDispatchToProps
。且mapStateToProps
和mapDispatchToProps
都是函数,哪为什么不把函数直接写在connect
里减少mapStateToProps
、mapDispatchToProps
的变量定义呢?是为了获取mapStateToProps
和 mapDispatchToProps
的类型嘛?
2、mapDispatchToProps
函数中参数 dispatch
的类型是什么呢?图片中我给 dispatch
的类型定义为了 any
才没有报错(参数“dispatch”隐式具有“any”类型)。视频里老师应该是把 “不允许隐式的any类型”改成false了。"noImplicitAny": false,
写回答
1回答
-
阿莱克斯刘
2021-11-20
1. 第一个问题,connct方法实际上使用的是HOC高阶方法来处理,而高阶方法的底层原理实际上是柯里化(curry)。基本原理就是向一个方法传入部分参数,同时返回一个匿名方法接受第二部分参数。所以,最后调用起来的表现形式看起来就非常古怪: fn(a)(b)。
举个例子:
function curry(f) { return function(a, b) { return f(a, b); }; } function sum(a, b) { return a + b; } curry(sum)(1, 2); //3
甚至是这样:
function curry(f) { // curry(f) 执行柯里化转换 return function(a) { return function(b) { return f(a, b); }; }; } // 用法 function sum(a, b) { return a + b; } let curriedSum = curry(sum); alert( curriedSum(1)(2) ); // 3
参考资料:https://zh.javascript.info/currying-partials
2. 第二个问题,dispatch的类型先留给悬念。先请继续课程,后续课程会详细讲解。
112021-11-21
相似问题