Проверьте, подключен ли ключ в онлайн-хранилище к любому компоненту в DOM прямо сейчас - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть хранилище данных с редуктором и данными, доступными для хранения этих данных.Я пытаюсь загрузить некоторые данные в хранилище, когда компонент подключен, и удалить эти данные, когда компонент отключен.Но перед удалением я хочу убедиться, что эти данные не используются никаким другим подключенным компонентом.До сих пор у меня есть

Store:

{
   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
   }
}

Таким образом, если есть два компонента, которым нужны элементы из хранилища, число активных компонентов будет равно 2, поэтому элементы будут удалены из хранилища, только если это число равно единице, а при других попытках удаления только активные компонентыколичество уменьшается на 1

Но это очень сложный подход, я полагаю, должен быть какой-то лучший и правильный способ сделать это.Есть мысли?

1 Ответ

0 голосов
/ 19 февраля 2019

Я думаю, что ваша идея с хранением числа activeComponents является правильным подходом, но вы должны использовать логическое значение, которое сделает его намного более простым в обращении.

Таким образом, вместо хранения activeComponents: 3 Вы можете просто сделать isUsed: true / false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...