169 похожих чатов

Нужен совет по хукам от опытных их пользователей :) Вот реализация

простого примера на классах. При монтировании компонента сделать запрос данных и потом делать запрос когда дочерний компонент попросит (простая лента, подгружающая данные при прокрутке)
class Parent extends React.Component {
componentDidMount() {
this.getData();
}

getData = () => {
...
}

render() {
return (
<Child
onButtonPress={this.getData}
/>
);
}
}

Пытаюсь переделать на функции и хуки.

export function Parent() {
const getData = () => {
...
};

useEffect(() => {
getData();
}, []);

return (
<Child
onButtonPress={getData}
/>
);
}

Вроде, согласно документации должно работать. Но в реальности я получаю замечание
Either include it or remove the dependency array.(react-hooks/exhaustive-dep
Если начать исправлять его, то происходит жуткая содомия: в useEffect добавляется зависимость от функции getData и я теперь не уверен что он сработает один раз при первом рендере, а функция getData оборачивается в useCallback и получает такое количество зависимостей в массив deps, что я просто уже не понимаю как это будет работать и вряд ли кто-то еще поймет если это увидит.

Как с этим бороться?

6 ответов

10 просмотров

Если ты уверен, что все правильно, то можно отключить здесь exhaustive-deps

Andrey-Eremenko Автор вопроса

Рекомендуется это правило не отключать, но я так часто сталкиваюсь с проблемами при его использовании, что появилось ощущение, что я чего-то не понимаю. Вот еще пример: https://stackoverflow.com/questions/56992052/how-to-fix-a-react-hooks-exhaustive-deps-linting-error-with-no-dependency Там предлагается сделать так: useEffect(() => () => clearMessages(), [clearMessages]) Вот когда это было так useEffect(() => () => clearMessages(), []) Я смотрю в код и вижу что функция выполнится один раз. А когда в зависимости попадает что-то, я вынужден анализировать весь перечень зависимостей чтобы понять как это будет работать. И потом весело будет наткнуться на тот факт, что зависимости не меняются никогда и они просто там добавлены чтобы линтер заткнулся.

> Рекомендуется это правило не отключать Его спокойно можно отключать, если ты понимаешь последствия. Например, тебе нужно, чтобы эффект выполнился строго один раз. Вполне можно отключить, если это действительно так

Это ужасный совет useEffect(() => () => clearMessages(), [clearMessages]) с большей долей вероятности приведет к некорректному поведению

Andrey-Eremenko Автор вопроса

спасибо. очень много непонятно с этими хуками. причем одним из аргументов при их введении было "С классами сложно разобраться" :))

С классами сложно было делать простые вещи. С хуками - просто. Но если делать сложные вещи, то появляются новые проблемы

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта