"@ @ INIT"在react-redux中的作用是什么?

17

刚注意到在打开页面时它总是第一个被调度的动作。它是用来从reducer中初始化存储的默认状态吗?

1个回答

21
我认为这将回答你的问题。
// 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 的 “官方声明”,其中指出:

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

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

因此,随机字符串实际上并没有意图让其可见。


6
在 Redux 源代码中,ActionTypes.INIT 表示 "@@redux/INIT" 加上一个随机字符串。但是在我的 Web 应用程序中,动作类型却显示为 "@@INIT",尽管这个特定的字符串在 Redux 源代码中并没有出现过。有人能解释一下吗? - Isaac Lyman
2
@IsaacLyman 虽然你之前问了一段时间,但我更新了我的答案,以回答你在评论中提出的问题。 - Ramiz Wachtler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接