react-redux 中“@@INIT”操作的目的是什么?

IT技术 javascript reactjs redux
2021-05-10 20:26:59

只是注意到它总是在打开页面时调度的第一个操作。它是否用于使用 reducer 的默认状态初始化 store?

1个回答

我想这会回答你的问题。

// When a store is created, an "INIT" action is dispatched so that every
// reducer returns their initial state. This effectively populates
// the initial state tree.

dispatch({ type: ActionTypes.INIT })

来源

2020 年 2 月 24 日更新

由于@IsaacLyman 明确询问了这一点并在评论中获得了一些赞成票,因此我决定进行更新以解决该问题。为了澄清,有问题的源代码如下:

const ActionTypes = {
  INIT: `@@redux/INIT${/* #__PURE__ */ randomString()}`,
  ...
}

来源

"randomString" 最初是在v4.0.0-beta.1 中引入的,在下面的提交中,您可以看到实际的更改(并阅读作者的简短评论)。尽管如此,我还是在这里找到了 Dan Abramov 的“官方声明” ,其中指出:

“...任何以 为前缀的操作@@都不会被处理。例如,你不应该尝试处理@@INIT。我们可能会通过稍微随机化名称(例如@@INIT_2hj3jh34来强制执行

@@INIT手动处理会破坏热重载。它会在每次热重载时调用,因此如果您在那里进行初始数据转换,第二次将无法工作。”

因此,它实际上并不是为了让随机字符串可见。