只是注意到它始终是打开页面时调度的第一个操作。它是否用于使用减速器的默认状态来初始化存储?
我想这会回答你的问题。
// 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 })
Source https://github.com/reactjs/redux/blob/55f1d08000b1b064eaa933bbbd132230e53bcccb/src/createStore.js#L242
更新 2020 年 2 月 24 日
由于@IsaacLyman 明确询问此事 https://stackoverflow.com/questions/41305492/what-is-the-purpose-of-the-init-action-in-react-redux/41305684#comment99561454_41305684并在评论中得到了一些赞成票,我决定进行更新以解决该问题。为了澄清,有问题的源代码如下:
const ActionTypes = {
INIT: `@@redux/INIT${/* #__PURE__ */ randomString()}`,
...
}
Source https://github.com/reduxjs/redux/blob/master/src/utils/actionTypes.ts#L16
“randomString”首先被引入v4.0.0-beta.1 https://github.com/reduxjs/redux/releases/tag/v4.0.0-beta.1, 在里面以下提交 https://github.com/reduxjs/redux/commit/e6f6c7da7b39ed46273d05d150cf1f578973ac3c您可以看到实际的更改(并阅读作者的简短评论)。尽管如此,我还找到了丹·阿布拉莫夫的“官方声明”here https://github.com/reduxjs/redux/issues/186,其中指出:
“...任何带有前缀的操作@@
不应该被处理。例如,你永远不应该尝试处理@@INIT
。我们可以通过稍微随机化名称来强制执行这一点(例如@@INIT_2hj3jh34
).
处理@@INIT
手动会破坏热重载。它在每次热重载时都会被调用,因此如果您在那里进行初始数据转换,那么第二次将无法工作。”
因此,实际上并不希望随机字符串可见。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)