Из документов
Опускать функцию из списка зависимостей безопасно только в том случае, если в нем (или вызываемых им функциях) нет ссылок на реквизиты, состояние или значения, полученные из них.
Проблема возникает, когда вы используете пропущенные реквизиты или, в вашем случае, реквизит истории, исходящий из HO C или хука от реакции-маршрутизатора.
Прежде всего , он передается как реквизит, и реквизит может измениться.
Во-вторых, вы вызываете функцию history.pu sh. Линтер не знает, что pu sh всегда будет одной и той же функцией класса истории, и что эта функция не будет использовать никакое состояние или подставлять себя.
«Правильный» путь согласно Facebook - это переместите функцию внутрь эффекта, но это не имеет смысла, если вы просто повторно используете код из какого-либо файла или используете функцию, подобную history.pu sh. Поэтому я думаю, что в вашем случае решение было бы заключить его в useCallback с историей в свой собственный массив зависимостей. Это последнее средство в соответствии с разработчиками.
По сути, useCallback просто возвращает запомненное значение вместо фактического доступа к значению, и всякий раз, когда значение в его зависимости изменяется, возникает новый обратный вызов с новыми запомненными значениями.
History.pu sh, конечно, всегда будет иметь одну и ту же идентичность, так что это отчасти противоречит закону.
Лично у меня никогда не было проблем с передачей таких значений. Поэтому я думаю, что писать useCallback, когда вы просто имеете дело с функциями, объявленными в другом месте (или любой полностью стабильной переменной), бессмысленно, и я считаю разумным пропустить ограничение этой строки.
Я сохраняю правило включенным, как и другие указал, однако, как хорошо держать вас в курсе о написании эффектов.