#reactjs
#reactjs
Вопрос:
Я создаю приложение React и получаю много предупреждений о том, что переменные отсутствуют в списке зависимостей в useEffect. в 99% случаев это переменные, которые используются в эффекте, но не должны вызывать повторный запуск эффекта, если они изменяются.
В этом примере react жалуется на отсутствие param, userInfo.currentcompany, showError и history в списке зависимостей. параметры и история поступают от маршрутизатора react и никогда не должны меняться. showError — это функция, которая никогда не меняется, но если она меняется, это не должно приводить к повторному запуску эффекта. userInfo изменяется только в двух местах приложения и не должен меняться во время работы этой страницы, но если он изменится, это не должно приводить к повторному запуску эффекта. И я использую userInfo и showError везде в приложении. Должен ли я отключить эти предупреждения в этом случае?
let {param}=useParams();
let {userInfo,showError}=useContext(AppContext);
useEffect(()=>{
if(param===null||param===undefined){
showError();
}else if(userInfo.currentCompany===null||userInfo.currentCompany===undefined){
history.replace('/');
}
},[]);
Комментарии:
1. Просто поместите их в список зависимостей. «не должно меняться» и «никогда не меняться» — это утверждения, которые могут не оставаться верными очень долго
2. Что, если вы действительно хотите добавить переменную в эффект, не заставляя эффект запускаться снова, если переменная изменяется?
3. Вот в чем дело. То, что вы видите, — это предупреждения linter, означающие, что вы в какой-то момент решили, что хотите следовать определенному стилю кодирования либо явно, либо потому, что он находится в предустановленном наборе рекомендаций (или это ваша среда IDE по умолчанию). Вообще говоря, я согласен с этим определенным правилом, которое нужно использовать, но в крайних случаях вы всегда можете просто подавить или проигнорировать предупреждения linter, если вы абсолютно уверены, что это то, что вы хотите. Они предназначены для того, чтобы вы знали, что делаете это, а не потому, что просто забыли (что может привести к ошибкам)
4. Я использую линтер по умолчанию из create-react-app. Вот почему я спрашиваю, делаю ли я что-то не так, прежде чем полностью отключить эти предупреждения.
5. Если под полным отключением вы подразумеваете этот конкретный случай, то вы можете это сделать, поскольку знаете, что хотите, чтобы эффект произошел только один раз. Однако хорошо не отключать предупреждение полностью из всех мест, поскольку обычно полезно иметь какое-то назойливое напоминание на случай, если вы случайно опустили зависимости где-то еще