现在检查redux存储中的密钥是否已连接到DOM中的任何组件

时间:2019-02-19 12:10:20

标签: javascript reactjs redux

我有一个带有减速器数据的redux存储,并使用可观察到的redux将其填充到存储中。我正在尝试在安装组件时加载存储中的某些数据,并在卸载组件时删除该数据。但是在删除之前,我想检查一下此数据是否已被任何其他已安装的组件使用。到目前为止,我只有这个

商店:

{
   data: {}
}

我的组件需要itemList,我调度了一个动作LOAD_ITEMS,一个史诗般的加载itemList并将其存储在存储中

{
    data: { items: {someItems}}
}

此组件具有以下要存储的连接-

componentDidMount () {
   if (!data.items) {
      dipatch(LOAD_ITEMS)
   }
}

componentWillUnmount() {
   // Before doing this I want to make sure that these items are not 
  // used by any other mounted componeted.
   dispatch(REMOVE_ITEMS_FROM_STORE);
}
mapStateToProps = () => ({
    data: store.data
})

我尝试的一种方法是保存所有安装的组件的数量,这些组件使用带有关键activeComponents的商店中的商品。就像关注

{
   data: {
       items: {someItems}
       activeComponents: 2 // count of mounted components which are 
                           //using items from store
   }
}

因此,如果有两个组件需要从存储中取出项目,则activeComponents的数量将为2,因此只有在此计数为1时,才会从存储中删除项目,在其他删除尝试中,仅activeComponents的数量减少1

但是这是非常复杂的方法,我想必须有一些更好和适当的方法来做到这一点。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为您的想法是,存储activeComponents数量是一种正确的方法,但是您应该使用布尔值,这将使其更易于处理。

因此,基本上不必存储activeComponents: 3,而只需执行isUsed: true / false