Итак, есть две проблемы, с которыми вы столкнетесь, и я попытаюсь их решить.
Отсутствующие зависимости в useEffect
.
Это вызвано eslint Правило из пакета eslint-plugin-Reaction-hooks , оно включено в приложение Создать реакцию по умолчанию.
Правило, о котором идет речь, react-hooks/exhaustive-deps
, и обычно оно находит свое место в моем .eslint.rc
установлен на off
по той причине, которую вы видите выше. В большинстве случаев достаточно безопасно добавить все зависимости, хотя обычно я нахожу, что список растет пропорционально, и я действительно хочу видеть только список зависимостей, которые useEffect
действительно заботятся об изменении.
Вы справедливо заявляете, что не хотите, чтобы это было зависимостью. Либо игнорируйте правило для указанной строки c, либо, если вы чувствуете, что понимаете, как полностью работают deps, отключите правило в файле eslint r c.
В качестве альтернативы, вы можете убедиться, что ваш хук зависимости объявляются без ошибок. Это потребует от вас абстрагирования обратных вызовов к вашему socket.on
вызову в их собственные useCallback
хуки, которые имеют свои собственные зависимости. Я не буду давать больше информации об этом, так как вы можете попробовать, если вы наберете sh, а затем зададите другой вопрос, если у вас возникнут проблемы.
Мутация состояний
Как уже упоминали другие, вы должны быть осторожны, чтобы не изменить свое состояние. У вас не будет ошибки типа, поскольку вы не определили тип своего состояния как только для чтения. Попробуйте изменить:
<string[]>useState(...)
на <readonly string[]>useState(...)
, и вы увидите, что вызываете изменяющие функции непосредственно в своем состоянии.