React:如何将组件标识传递给 Redux 状态

React: how to pass component identity to Redux state

从使用 React.createClass 定义的组件将 this 传递给 Redux action creator 是否安全?

我定义了以下减速器:

const unsavedChangesProtectionReducer = handleActions({
    [ENABLE_UNSAVED_CHANGES_PROTECTION]: (unsavedChangesProtection, action) => ({protected: true}),
    [DISABLE_UNSAVED_CHANGES_PROTECTION]: (unsavedChangesProtection, action) => ({protected: false})},
    {protected: false}
)

多个组件可能 set/unset 全局 state.unsavedChangesProtection.protected 标志,取消设置此标志会出现问题,因为如果其他组件不应该取消设置组件已在此组件之前设置。

一种解决方案是检查标志是否已设置,如果没有,则设置它,将有关组件设置标志的信息存储在组件的内部状态中,如果内部状态表明组件已设置标志,则取消设置。但是,这违反了 DRY 原则,因为我必须在每个组件中引入完全相同的登录。

更通用的解决方案是将最后改变全局状态的组件的标识存储为状态本身的成员,这样每个组件都可以从状态中看到它是否是它们的更改并相应地取消设置。这是否可以在 React 中实现,因为每个组件都在 mounted/unmounted

时重新初始化

当然,在 reducer 中有一个 setBy 属性 可以工作,你还必须为每个可能改变标志的组件的 componentWillUnmount 方法添加额外的逻辑如果组件首先负责 setting/unsetting 标志,这将触发重置 setBy 操作(您不想留下对从 [=16 中删除的组件的引用) =] 因为它会阻止所有其他组件更改标志)