React-Redux 中“@@INIT”操作的目的是什么?

2024-02-22

只是注意到它始终是打开页面时调度的第一个操作。它是否用于使用减速器的默认状态来初始化存储?


我想这会回答你的问题。

// 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(使用前将#替换为@)

React-Redux 中“@@INIT”操作的目的是什么? 的相关文章

随机推荐