我正在阅读以下内容:https://github.com/pburtchaell/redux-promise-middleware/blob/master/src/index.js

我知道...被用作对象传播。我知道!!用于将任何内容转换为具有相同真实性的 bool 值。

然而,知道这是什么,当它们像...!!放在一起时是什么意思?我在这里无法理解最后一行:

{
  ...resolveAction,
  ...isAction(rejected) ? rejected : {
    ...!!rejected && { payload: rejected }
}
  • ...resolveAction只是传播resolveAction的 key 。
  • ...isAction(rejected) ?将检查rejected是否解决了某个 Action ,然后将其传播。 (也不知道这一点)
  • 如果为
  • ,则将rejected添加到对象
  • {...!!rejected && { payload: rejected } ????????????????
  • ...!!甚至是有效的语法如何?有两种选择:
  • 如果它首先扩展对象,则!!将应用于所有扩展键
  • 如果首先应用!!,则它是一个 bool 值,无法传播。

  • 所以这没有任何意义,还是我错过了一些东西,因为给出了该代码,我认为它正在尝试散布 bool 值。

    最佳答案

    好的,所以在下载了npm模块并浏览了转码后,我发现了这一行:

    return dispatch(isThunk(rejected) ? rejected.bind(null, resolveAction) : _extends({}, resolveAction, isAction(rejected) ? rejected : _extends({}, !!rejected && { payload: rejected })));
    

    其中相关部​​分在这里:
    _extends({}, !!rejected && { payload: rejected })
    

    基本上,如果!!rejected为true,那么它将把有效负载散布到对象中。如果不是_extends({}, false),则仅返回{}

    这项工作的关键是...的优先级比整行中的其他任何运算符都要低。考虑到这一点,您就可以开始理解它了。

    09-19 14:28