刚注意到在打开页面时它总是第一个被调度的动作。它是用来从reducer中初始化存储的默认状态吗?
刚注意到在打开页面时它总是第一个被调度的动作。它是用来从reducer中初始化存储的默认状态吗?
// 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
将会破坏热重载。它在每次热重载时调用,因此如果你在那里进行初始数据转换,它将不起作用第二次。”
因此,随机字符串实际上并没有意图让其可见。
ActionTypes.INIT
表示"@@redux/INIT"
加上一个随机字符串。但是在我的 Web 应用程序中,动作类型却显示为"@@INIT"
,尽管这个特定的字符串在 Redux 源代码中并没有出现过。有人能解释一下吗? - Isaac Lyman