这段代码是做什么的
What does this code do?
// @flow
import { compose, createStore } from 'redux';
import thunk from 'redux-thunk';
const composedStore = compose(
applyMiddleware(thunk),
__CLIENT__ && window.devToolsExtension ? window.devToolsExtension() : f => f
)(createStore)
这段代码是一个来自React-Redux"通用"应用程序样板的文件。我可以在大多数情况下把我的头绕起来,尽管在第二个参数的假情况条件逻辑的撰写函数绊倒了我-什么是f => f
??
除非我弄错了,这是JS中与
等价的东西。function(f){
return f;
}
在这种情况下,f
参数来自哪里,这个函数实际上返回什么??在文件的其他任何地方都没有对f
变量的其他引用。非常让人困惑。
除非我弄错了,这是JS中与
等价的东西。function(f){ return f; }
差不多,因为函数体不使用this
或arguments
;注意事项:
-
箭头函数(
f => f
)关闭this
和arguments
(而不是对它们有自己的含义),function
表达式不会,但给定函数的内容无关紧要,因为它不使用它们。 -
箭头函数是香草JavaScript (ES2015)。
在这种情况下,f参数是从哪里来的??
与传递给函数的任何回调相同的地方:Whatever调用它。这个回调将被传递到compose
,所以要知道它将如何被调用以及使用什么参数,您可以查看Redux中的compose
定义:
每个函数只能接受一个参数。它的返回值将作为左侧函数的参数提供,依此类推。唯一的例外是最右边的实参,它可以接受多个形参,因为它将为生成的组合函数提供签名。
因此该函数将接收applyMiddleware(thunk)
返回的函数返回的任何值。
使用f => f
函数的唯一原因是作者可以使用单行;例如,他们需要为条件运算符的假操作数提供一些东西。他们可以这样做:
let temp = applyMiddleware(thunk)(createStore);
if (__CLIENT__ && window.devToolsExtension) {
temp = window.devToolsExtension()(temp);
}
const composedStore = temp;
…但是可能想要避免使用临时变量
我觉得这就像一个noop。如果我们不在Dev Tools扩展中,则compose的第二个参数是一个只返回给定值的函数。
const isDevToolExtension = __CLIENT__ && window.devToolsExtension;
const returnItself = function(f) {
return f;
}
const composedStore = compose(
applyMiddleware(thunk),
isDevToolExtension ? window.devToolsExtension() : returnItself
)(createStore)
相关文章:
- 有什么工具可以轻松读取javascript代码吗
- 我不知道为什么我的代码是错误的?又有什么错
- 这个代码在网页中的作用和要求是什么
- 什么'这个javascript代码getElementById有问题
- 问号在这段代码中是什么意思
- 什么'这是谷歌分析跟踪代码使用的技术
- 我不知道此代码中的这些符号是什么意思.十进制到二进制
- 此nodeValue替换代码有什么问题
- 什么正在取代我的'以及“;javascript代码中使用'和&”;
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- Javascript Carousel:是什么代码可以显示一些以前的图像
- 我需要添加什么代码,以便此 javascript 自动在文本末尾添加 3 个点
- 我需要什么代码才能让从我的数组中订购的披萨重新出现在不同的函数中
- 这是什么代码/^(d{4}|d{6})$/
- (HTML)链接到一个图像,不确定什么代码关闭图像
- 这是什么代码?{{phrase.addAdministrator}}
- 我应该添加什么代码来使用JavaScript显示以下输出?
- 我需要在这个脚本上编辑什么代码才能获得有效的电子邮件
- 在网站内单击时,将javascript变量(trailimage)交换为另一个需要什么代码
- 如果原型不能访问私有变量,那么“清理”的最佳方法是什么?代码