Paul
Я сам их до конца не понимаю) в жс очень плохая имплементация, как по мне
Artem
не надо
спасибо)
Artem
Да
спасибо)
Artem
пошел постигать азы генераторов* )
Paul
в генераторы стоит джуну залезть?
Ну вообще можешь, но только не читай статью на learn.javascript
Александр
Я сам их до конца не понимаю) в жс очень плохая имплементация, как по мне
Ее и нет в js, оно транспилится в конечные автоматы
Paul
Там просто пздц а не статья
Paul
Илье кантору стоит ее сжечь
Александр
Я сам их до конца не понимаю) в жс очень плохая имплементация, как по мне
А что вам не нравится конкретно? Или вы про синтаксис этого всего?
Paul
Синтаксис в том числе
Looch
Генераторы легко понять
Александр
Синтаксис в том числе
Ммм, а почему? Ну кроме звёздочки в объявлении.
Paul
Мне условно понятно, т.к. есть опыт с серверными языками
Looch
Но имхо, их лучше всего для итераторов юхать и все
Paul
Просто в жс это слишком тесно связано с итераторами, а после появления асинк\эвейта, вообще мрак
Looch
Не нужно на них сайд эффект пидалить + имплементация в каждом движке разная и можно легко поймать проблемки с перфомансом
Paul
Я наблюдал как-то, что люди на ноде до сих пор юзают генераторы для flatten async
Александр
Yield он и есть yield, если знаком с понятием корутин и кооперативной многозадачности то вообще просто
Looch
ну саги умеют не только это
Looch
Но вообще да
Paul
Кто-то еще и tj/co юзает..
Looch
90% кейсов это просто замена await
Александр
ну саги умеют не только это
Проблема в том, что людям бы порой азы надо подтянуть, а они кидаются во все тяжкие с сагами и так далее
Looch
Хотя есть даже асинг генераторы
Looch
Которые не зайилдят пока не подучат результат промиса
Looch
Александр
Инструменты нормальные, но разруха в головах
Paul
Ну нет, сага мрачная, как по мне
Looch
90% всех кейсов решаются промисамм
Александр
Ну нет, сага мрачная, как по мне
Мне нравится, но я бы не рекомендовал начинающим
Looch
Даже 95%
Александр
Paul
Мы ее юзали только из-за тестируемости
Artem
Ну нет, сага мрачная, как по мне
import { useState, useEffect } from 'react'; function usePreloader() { const [isLoaded, setLoad] = useState(false); useEffect(() => { setTimeout(() => { setLoad(true) }, 1800); }, []); return function() { return isLoaded; }; } export default usePreloader; можете пнуть, пожалуйста, где я бестолочь?)
Paul
Тот же redux-thunk мне нравился намного больше, т.к. он простой как топор и классный
Looch
Мы ее юзали только из-за тестируемости
ну да, генераторы супер изи тестировать
Looch
А вообще просто не юзайте редакс 🙇🏻‍♂️
Artem
Зачем возвращать функцию ?
Помогите, пожалуйста. Есть свой хук, который возвращает булево значение (допустим по таймауту или запросу). Импортирую его в компонент (допустим Арр). Делаю const isSomething = useMyHook(); Далее мне нужно вызвать эту переменную допустим у списка. Т.е. каждый элемент списка должен иметь при запуске свой isSomething = boolean. Как можно это сделать? Вот вопрос был
Александр
Слава богу :) а то я мнительный что-то
Artem
Так, а в чем цель?
Цель в этом(кусок кода): function App() { const isLoaded: boolean = usePreloader(); console.log(isLoaded); return ( <div className="app"> <Toolbar /> <div className="app__page-container"> <Switch> <Route exact path="/" render={() => ( isLoaded ? <Home /> : <Preloader /> )} />
Artem
Лучше скажите что вы хотите в целом добиться
чтобы у каждого роута было свое состояние. раньше было в каждом компоненте свое, все работало. но это же с точки зрения архитектуры буэ, нет?
Александр
Как это тайпчекер пропустил вообще
Александр
Не понятно вы данные на каждый роут свои Грузите или они общие ?
Artem
Угу
он не пустил, орёт во всё горло. вопрос то в том, что изначально я не возвращал своим хуком функцию, а просто возвращал переменную. но суть в том, что она приходит в Апп, все ок. Но потом просто переключается в тру и встает намертво. Как мне сделать чтобы у каждого роута свой счетчик был
Artem
Угу
нет никаких данных. только таймаут и всё. это для примера прелоадера.
Artem
Угу
есть свой хук, которые возвращает булево значение (ранее этот хук был в каждом компоненте отдельно и как следствие дублирование кода было оч большое). сейчас я хочу вынести таймер допустим 2 секунды на показ прелоадера, а потом рендер страницы. Чтобы у каждого роута отрабатывала usePreloader заного
Artem
Верните isLoaded просто
так изначально он и возвращался, но после того, как срабатывает isLoaded = usePreloader(), она далее то не меняется. при вызове других роутов
Artem
если консоль лог переменной сделать
Artem
то он выдаст false ...timeout ... true
Artem
и встанет на этом
Artem
Понятно, и не должна :)
воот а я спрашиваю как мне сделать так, чтобы каждый отдельно взятый роут заного забирал оттуда булево значение
Александр
Внесите логику с задержкой внутрь прелоадера
Александр
На каждом роуте будет свой прелоадер со своей задержкой
Александр
Это вам нужно?
Artem
Внесите логику с задержкой внутрь прелоадера
да, спасибо большое, только как мне тогда вверх по дереву передать переменную isLoad из прелоадера? мне ведь рендеру роута нужно сказать когда рендерить прелоадер, а когда компонент
Александр
Если вам для демонстрации то это одно
Mihail
withLoader
Artem
Хм, у вас пример сильно синтетический как по мне
а как это правильно по архитектуре сделать?
Александр
Сделать хок или компонент лучше Preloader который как children будет принимать содержимое, но рендерить его с задержкой
Artem
Artem
Сделать хок или компонент лучше Preloader который как children будет принимать содержимое, но рендерить его с задержкой
т.е. мне просто при рендере определенного роута вызывать компонент прелоадер и передать туда параметром нужный компонент? а в прелоадере уже заниматься всеми маг. действиями?
Александр
а если бы не для демонстрации, то как лучше было бы архитектуру выстроить?
Для недемонстрации наверное данные грузились бы в каждый компонент который по роуту рендерится, и вот внутри каждого такого компонента будет что-то типа если loading то показать прелоадер иначе показать данные