Dmitry
Ivan
Anonymous
Anonymous
Спасибо за то что поговорили со мной, время потратили, но похоже все куда то впустую
Ivan
Anonymous
Погодите, подождите. А разве отсутсвие вызова сайд-эффекта — не ФП?
Мне надо проветриться пойти, давайте заканчивать, то что вы декларативно пишите
1. Вызвать лифт
2. Ждать событие лифт приехал
3. Зайти в него
4. Нажать кпопку
```
Это совершенно не значит что parse execute этого не будет содержать сайд эффекты, просто вызывать их будет кто-то в кишках этого процесса
Ivan
Serhii
Доброй ночи, ребята кто сможет обьяснить почему этот код повторно не вызывается
useEffect(() => {
(async () => {
try {
dispatch({ type: 'FETCH_INIT' });
const admins = await fetch(adminsUrl, 'GET');
dispatch({ type: 'FETCH_SUCCESS', payload: admins });
} catch (error) {
dispatch({ type: 'FETCH_FAILURE', message: error.message });
}
})();
}, []);
Те он вызывается при рендере, потом я ловлю к примеру ошибку и вызываю снова reducer, который по идее обновляет стейт и соответственно должен запустить useEffect снова
Alexey
В скобках, после колбека от useState, необходимо поместить что - то, что будет меняться.
Alexey
Можно ваш admins.
Alexey
Пустой массив ознaчает применение один раз, если я правильно читал документацию. :))
Eugen
Ребята, привет все, Подскажите плиз либу для древовидной структуры (построения дерева айтомов)?
Alexey
react - dnd смотрели? Там есть библиотека react - tree и много других полезных. :)
Serhii
@Alexnorvag я использую useReducer
Serhii
я правильно понимаю, useEffect вызывается при рендере и если передан второй аргумент и он изменился?
Alexey
@svatz , ну смотрите, если переводить на классы, то useEffect - это аналог componentDidMount, componentDidUnmount и componentDidUpdate. Когда вы пишите без массива в конце, то у вас работает просто componentDidMount, когда указываете массив в конце, то уже как componentDidMount и componentDidUpdate. А если эффект возвращает что - либо, то ко всему этому ещё и componentDidUnmount.
Serhii
у меня вываливается ошибка которую я ловлю и мне нужно весь процесс повторить, те с начальным стейтом, снова попытаться вытащить данные
Alexey
Если у вас пустой массив, то вам не с чем сравнивать, соответсвенно ваш componentDidMount выполняется только один раз. Если в массиве указать зависимость от состояния, то сможете запускать заново. :)
Daniil
Alexey
@Tchernyavsky не совсем) Там и апдейт присутствует
Serhii
смотрите, я указал зависимость isLoading, и оно погнало в рекурсию)
Daniil
Serhii
соответственно если я укажу в зависимость data, то по идее он опять же не обновится потому что дата не пришла, я отлавливаю ошибку
Daniil
Alexey
а я что говорю? CDM обновляется?)
Ладно - ладно, я просто рассказываю как в документации. :))
Если не вставлять пустой массив, то будет работать только ка componentDidMount. А так ещё и componentDidUpdate. ;/
Alexey
@svatz вы можете указать несколько зависимостей. Например, добавьте ошибку, которую словили.
Serhii
@Alexnorvag их через запятую можно добавлять?
Alexey
Да, как элементы массива.
Daniil
[deep1, deep2]
Serhii
блин, просто рекурсия и все
Alexey
А может есть у кого хорошая реализация filereader-a? И вообще, шарит кто - нить, нужны ли промисы для чтения или можно обойтись?
Alexey
@svatz код большой? Просто если есть возможность весь увидеть, то было бы лучше. :) В виде ссылочки, конечно. :D
Serhii
@Alexnorvag нет, там строчек 70 растянутых) ща на гист загружу
Alexey
@svatz окей, я просто сам с похожей темой сижу, будет интересно решить вопрос. :)
Serhii
https://gist.github.com/nodesvatz/cddd07f43cc952da0bbb968df87638f8
Serhii
@Alexnorvag я только сегодня познакомился с useReducer, и вообще на реакте пишу редко, так что не осуждайте)
Serhii
возможно я саму концепцию не уловил
Alexey
@svatz да всё отлично, попробуйте вообще убрать массив. Должно сработать. У вас меняется стэйт, а это уже предпосылка каждый раз вызывать эффект.
Alexey
Вообще, можно в консоли увидеть варнинг. В нём будет вся информация, что желательно добавить. :)
Serhii
убрал массив и снова рекурсия)
Alexey
Убрали вообще? И скобки?
Serhii
useEffect(() => {
(async () => {
try {
dispatch({ type: 'FETCH_INIT' });
const admins = await fetch(adminsUrl, 'GET');
dispatch({ type: 'FETCH_SUCCESS', payload: admins });
} catch (error) {
dispatch({ type: 'FETCH_FAILURE', message: error.message });
}
})();
});
Alexey
А в консоли просто из - за рекурсии ошибка? Или есть ещё что - то?
Serhii
не, реакт ни на что не ругается, просто рекурсия валит бесконечная)
Serhii
в принципе это очевидно, мой стейт постоянно меняется и вызывается useEffect который в свою очеред тоже стейт меняет, может цепочку этих диспатчей вообще вынести в отдельную функцию и вызывать ее в момент когда модальное окно всплывает
Alexey
А если закомментить вот это? dispatch({ type: 'FETCH_SUCCESS', payload: admins Будет рекурсия? Мне кажется в этом вызове ошибка.
Serhii
да, все равно, но я по всей видимости нашел беду и исправил, но не уверен на сколько это окей, один раз вызывать в useEffect всю эту логику, а потом в случае если модалка всплыла, вызывать в отдельной функции это дело снова
Alexey
А у вас по открытию модального нужно вызывать fetch? А не, понял. И при инициализации.
Serhii
да, типа это хендлинг ошибки, открывается модалка, а мы можем повторить реквест или не повторять
Serhii
а первый fetch при загрузке страницы где лучше сделать?
Alexey
@svatz а, ну всё, сорян, я просто подумал, что нужно только когда хэндл срабатывает. :)
Serhii
@Alexnorvag да, вроде работает) спасибо что уделил время, я бы сам не осознал как эти штуки срабатывают)
Alexey
@svatz ахахаха, да не за что. В прямом смысле выражения. ;D
Serhii
та не, ты подтолкнул меня на некие размышления) я бы сам еще пол ночи ковырялся
Alexey
ахаха. Ну ладно. XD
倫太郎
@Atassis
Георгий
NCR
Товарищи фронтендеры, работает же кто-нибудь на большом проекте под виндой? Как ваша производительность в NTFS с маленькими файлами? Хотелось бы знать ваш опыт в бусте: юзаете ли вы виртуальную машину, или просто девелопите в облаке...
Indra
Andrey
Indra
Alexey
Кто выписывает баны? Пожалуйста обратите внимание на то, как здесь принижают честь и достоинство фронтендеров. Я, как начинающий фронтер просто негодую. 🤬
Indra
Nikita
Ребята не работает фича на ios, можно кого нибудь попросить продебажить? Нет возможности. Нужно просто узнать где ошибка
Alexey
@nikitapilgrim , может, лучше у нативщиков спросить? Это другой канал.
Nikita
кстати да, спасибо. Не подскажешь канал?
Alexey
Demuz
Привет всем. Видел componentWillReact в нескольких проектах, но он практически не гуглится. Подскажите, оно вобще сейчас существует? Или это было в каких-то старых версиях mobx и т.п.?
Volodymyr
Volodymyr
Линкцется с каким то депенденси ??
Demuz
На медиуме говорят типа это добавлялось в жизненный цикл react, если вы оборачиваете его в observer и используете в нем mobx.
Volodymyr
Значит ответ на твой вопрос - это использует MobX , буду капитаном
Demuz
Demuz
https://medium.com/@fabledva/%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4-%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-mobx-js-%D1%87%D0%B0%D1%81%D1%82%D1%8C-%D0%BF%D0%B5%D1%80%D0%B2%D0%B0%D1%8F-8c2481fd3505