只是注意到它总是在打开页面时调度的第一个操作。它是否用于使用 reducer 的默认状态初始化 store?
react-redux 中“@@INIT”操作的目的是什么?
IT技术
javascript
reactjs
redux
2021-05-10 20:26:59
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
手动处理会破坏热重载。它会在每次热重载时调用,因此如果您在那里进行初始数据转换,第二次将无法工作。”
因此,它实际上并不是为了让随机字符串可见。