Частое обновление useSelector необязательно или рекомендуется?

Я использую `useSelector` в следующем виде:
```javascript
// some code
```
Я решил посмотреть, сколько раз он вызывается, используя консольный вывод логов:

```javascript
// some code
```

Я обратил внимание, что он обновляется довольно часто, примерно раз в миллисекунду. Всего за минуту было выведено 3203 записи в консоль.

Это является ожидаемым поведением или я сделал что-то неправильно?

Кроме того, у меня есть второй вопрос: если такое поведение ожидаемо, как лучше всего использовать `useSelector`? Следует ли создавать несколько экземпляров `useSelector`, или лучше передать один экземпляр, в котором содержится весь необходимый объект данных?
Изображение к вопросу
Изображение к вопросу
  • 20 октября 2023 г. 2:40
Ответы на вопрос 2
Частота обновления `useSelector` зависит от множества факторов, таких как изменение данных, которые на него подписаны, и рендеринг компонента, в котором он используется. Вообще говоря, чем чаще данные, на которые подписан `useSelector`, обновляются, тем чаще будет вызываться `useSelector`.

Однако, вызов `useSelector` раз в миллисекунду - это необычно и, вероятно, указывает на проблему в коде. Возможно, что ваш селектор или компонент находятся в цикле обновления из-за изменения своих зависимостей. Нужно тщательно изучить ваш код, чтобы выяснить, что вызывает такую частую перерисовку.

По поводу использования `useSelector`, вам необходимо решить, какая часть стейта вам действительно нужна в вашем компоненте. Если вам нужен только один кусок стейта, то один экземпляр `useSelector` будет достаточным. Если вам нужно несколько кусков стейта, можно использовать несколько `useSelector`.

В любом случае, если вы добавляете на свои селекторы мемоизации, такие как `Reselect` или `Memoizee`, это поможет оптимизировать производительность, уменьшив частоту повторных вызовов `useSelector`.
Один из возможных случаев - слишком частое обновление стейта, либо запуск бесконечной циклической перерисовки. Возможен также комбинированный вариант - вызов эффекта при каждой перерисовке и обновление стейта внутри этого эффекта. Без предоставления кода сложно определить точную причину.
Похожие вопросы