动作名称是否是Redux形式的公共API的一部分?

时间:2018-11-08 21:00:51

标签: reactjs redux redux-form

首先,我不确定我在React / Redux应用程序中安装的大多数第三方软件包所表示的操作中的@@前缀是什么-如果它们表示“私有”,则我的问题的答案很明显。我在Chrome的Redux devtools扩展程序中看到了它们。

如果这只是范围约定@@<package>/<action>,那么我对redux-form包中的操作有一个具体的问题。动作显然是not documented,所以我不确定是否可以安全地在我的减速器中使用它们,而不必担心会破坏更改。

有关更多情况,以防万一我的方法完全错误(仍在弄清楚模式):我想删除注册表单并在成功完成后显示成功消息。 redux-form调度类型为@@redux-form/SET_SUBMIT_SUCCEEDED的操作,其中meta.form告诉我这是我命名为register的形式。因此,我将在RegisterPage减速器中使用它来设置布尔值isSuccess并使用它来更改视图。

1 个答案:

答案 0 :(得分:1)

如果未明确记录它们,则将其视为私有并且不直接使用。即使未在任何地方正式声明,@@前缀也通常表示私人动作,而其他reducer代码则不应处理这些私人动作。我认为它源自@@redux/INIT_{random string}动作(可以在此github thread中找到有关命名的讨论):

  

在新文档(#140)中,我们应阐明所有带前缀的操作   @@并不意味着要处理。例如,您永远不要尝试   处理@@ INIT。

redux code itself中,隐私也被明确声明:

/**
 * These are private action types reserved by Redux.
 * For any unknown actions, you must return the current state.
 * If the current state is undefined, you must return the initial state.
 * Do not reference these action types directly in your code.
 */

对于您的特定问题:您可以向HOC提供onSubmitSuccess function并调度您自己的操作来更新自己的reducer,或者您可以直接依赖redux表单状态并通过{{3 }}。我个人认为第二种选择是更好的选择,因为它不会在您的商店中引入冗余状态-redux表单已经存储了是否成功提交了表单的信息,您自己在另一个子归约器中这样做可能导致这两种选择布尔值无意间发散。