По-моему, все топ фреймворки имеют санитайзеры из коробки, вставкой квери параметров напрямую в джс можно удивить студента на 1 курсе. В реальных же проектах все делается само и никакие экранирования не нужны. Переменные из юрл отобразятся просто как текст, а не рендер html/js.
Просто здесь комплексное решение любой задачи, связанной с асинхронностью, от этого и удобство) Можно как поймать событие, так и обратиться к серверу, так и сохранить состояние с мемоизацией и многое многое. Согласен, что, когда работаешь с одним инструментом, то привыкаешь к нему, в ангуларе общий подход немного другой - там все есть из коробки, специально для ентепрайза - запустил и работаешь. В реакте же собирается конструктор по кусочкам, чтобы можно было выполнить текущую задачу, оттуда и бесконечный набор библиотек под каждую из них. Кому как удобнее - уже каждый выбирает сам
О каких кастомных операторах идет речь? все доступно из коробки после npm i
Куда вставлять setLoading
ответил сообщением выше
Куда втыкать breakpoint'ы при отладк
в любой оператор или добавлять .tap(data => console.log(data)) между любыми операторами цепочки и смотрим результат
Куда вставлять cancellationToken
все уже встроенно из коробки, ничего вставлять не надо есть 4 вида смены и мерджа потоков, switchMap отменяет поток перед собой и запускает новый
Всё это объясняет почему в Angular при встроенном RxJS, тащили Redux, а сейчас наконец добавили нормальную реактивность на атомах.
не понимаю, о чем речь) там NgRx уже как 9 лет существует единственные изменения, которые происходили - с последних версий добавили Signals и то, только для того, чтобы выйти на поддержку ZoneLess приложений и уйти от обертки, когда происходит много лишний действий с переотрисовкой и обновлением состояния, а обновлять ее руками, только там, где нужно
.pipe(
tap(() => setLoading(true))
// выполнится после закрытия потока при любом условии success|error
finalize(() => setLoading(false))
... далее из примера
)
каким образом происходит обработка ошибок
.pipe(
// здесь или делаем заглушку, например
// или прокидываем новую ошибку throw new Error('text')
catchError(() => return of(null))
... далее из примера
)
// либо ловим ошибку внутри .subscribe()
.subscribe(
(data) => this.onSuccess(data),
(error) => this.handleError(error)
);
как принудительно отменить всю цепочку
присвоить весь поток переменной типа new Subscription() и потом вызвать myVar.unsubscribe()
Как действительно отменить http запрос в этой цепочке
все уже сделано из коробки, запрос сам уйдет в Cancelled, нужно просто пользоваться http сервисом от rxjs, как отметили в комментарии выше, в ангуларе он уже встроен
fromEvent(this.myInput.nativeElement, 'keyup')
.pipe(
// задержка ввода 200ms
debounceTime(200),
map(value => value?.trim().toLowerCase()),
// проверка, что старое значение не равно новому
distinctUntilChanged(),
// switchMap сам отменит асинк операцию, если поступит новое значение до того, как цепочка действий завершится
// from() - конвертирует async в Observable<>
switchMap(value => from(axios.get(`myapi.com/news?query=${value}`)))
).subscribe(result => результаты автозаполнения)
итого,за 6 строк мы сделали - подписку на ввод, задержку нажатий, трим и приведение регистра, автоматическую отмену Get запроса вдобавок еще и проверку на то, что новый ввод отличен от старого, чтобы просто так не трогать сервер
где здесь "страшен как атомная война " ?
единственное, что я упустил - отписку от keyup, но это еще +1 строка, в зависимости от подхода
Причем здесь State Management и RxJs? В статье речь об отмене потока и аналогу async|await, с чем RxJs справляется на ура через модель Subscription А в плане страшности, цепочка из пары функций в .pipe() выглядят в разы читабельнее, чем этот ужас сверху с yield
Статья интересная сама по себе, но зачем все это знать практикующему фронту? Более того, если бы такую духоту спрашивали на собеседовании, то сразу лучше бежать с такой компании. Одно дело - разбираться в разнице flex, grid и block, другое - лезть в дебри того, как браузер это себе интерпертирует. В качестве чтива на вечер - ок, в качестве проверки знаний на интервью - это худший вопрос на свете
Потому что у нас не продается ничего по "рекомендованной цене производителя"?? после конвертации валют и докидывания сверху от каждого участника цепочки, доставляющего карточку от завода до магазине, цена получается в разы больше и как раз после описанных скидок она может приблизиться к рекомендованной
Что не так с битбакетом? если вы им не пользуетесь, не значит, что он не нужен. Он часть инфраструктуры атлассиан, кто сидит в ней, вполне годный вариант, чем гитхаб лучше?
Здесь дело в том, что у по каскаду идет только max ограничения, но нет самой величины height, если у родителя задать и height и max-height, то проблема исчезнет
Ваша проблема в том, что рынок работает совсем по другому, вы просто закинули картинки на сайт, а вот как проходят популярные проекты:
1- Сперва нужно максимально разлекламировать коллекцию до выпуска (за 2-3 месяца минимум), создав такую атмосферу, что каждый поверил бы в то, что в день запуска она непременно разлетится как горячие пирожки
2 - Сделать минт не самому, а кнопку на вебсайте. Чтобы в день Х любой желающий мог нажав ее, получить картинку на своей кошелек, тогда и цена минта вместе с газом оплачивается покупателем (минты на полигоне считаются для нищебродов и ими никто не пользуется)
3 - И это не считая всяких White List'ов, розыгрышей и прочего прочего
4 - Коллекция должна быть постороена по примеру рпг - от "зеленых" до "легендарных" вещей, есть сервисы, которые оценивают изображение по трейтам и строит рейтинг
Вся суть проекта сводится к аналогу открывания луктбоксов из игр, когда за минимальный прайс 0.05-0.1 ETH человек может себе выбить через минт как шерпотреб, так и легендарку, после перепродав ее. А так же никто не знает, насколько успешно вы продадитесь, тем самым, возвращаясь к 1 пункту, каждый будет думать, что если он не нажмет минт, то точно будет sold out и потом не успеет, таким образом коллекции и продаются
А зачем регистрировать под multi то, что должно быть потом получено в единственном значении? В чем проблема выделить под них отдельное имя?
По-моему, все топ фреймворки имеют санитайзеры из коробки, вставкой квери параметров напрямую в джс можно удивить студента на 1 курсе. В реальных же проектах все делается само и никакие экранирования не нужны.
Переменные из юрл отобразятся просто как текст, а не рендер html/js.
Просто здесь комплексное решение любой задачи, связанной с асинхронностью, от этого и удобство)
Можно как поймать событие, так и обратиться к серверу, так и сохранить состояние с мемоизацией и многое многое.
Согласен, что, когда работаешь с одним инструментом, то привыкаешь к нему, в ангуларе общий подход немного другой - там все есть из коробки, специально для ентепрайза - запустил и работаешь.
В реакте же собирается конструктор по кусочкам, чтобы можно было выполнить текущую задачу, оттуда и бесконечный набор библиотек под каждую из них.
Кому как удобнее - уже каждый выбирает сам
О каких кастомных операторах идет речь? все доступно из коробки после npm i
ответил сообщением выше
в любой оператор или добавлять .tap(data => console.log(data)) между любыми операторами цепочки и смотрим результат
все уже встроенно из коробки, ничего вставлять не надо
есть 4 вида смены и мерджа потоков, switchMap отменяет поток перед собой и запускает новый
не понимаю, о чем речь)
там NgRx уже как 9 лет существует
единственные изменения, которые происходили - с последних версий добавили Signals
и то, только для того, чтобы выйти на поддержку ZoneLess приложений и уйти от обертки, когда происходит много лишний действий с переотрисовкой и обновлением состояния, а обновлять ее руками, только там, где нужно
сразу же первым оператором в цепочке можно
присвоить весь поток переменной типа new Subscription() и потом вызвать myVar.unsubscribe()
все уже сделано из коробки, запрос сам уйдет в Cancelled, нужно просто пользоваться http сервисом от rxjs, как отметили в комментарии выше, в ангуларе он уже встроен
итого,за 6 строк мы сделали - подписку на ввод, задержку нажатий, трим и приведение регистра, автоматическую отмену Get запроса
вдобавок еще и проверку на то, что новый ввод отличен от старого, чтобы просто так не трогать сервер
где здесь "страшен как атомная война " ?
единственное, что я упустил - отписку от keyup, но это еще +1 строка, в зависимости от подхода
Причем здесь State Management и RxJs? В статье речь об отмене потока и аналогу async|await, с чем RxJs справляется на ура через модель Subscription
А в плане страшности, цепочка из пары функций в .pipe() выглядят в разы читабельнее, чем этот ужас сверху с yield
Спасибо, что есть RxJs, которому уже почти 10 лет. Все уже давно придумано, но в реакте до сих пор изобретают велосипеды
Статья интересная сама по себе, но зачем все это знать практикующему фронту?
Более того, если бы такую духоту спрашивали на собеседовании, то сразу лучше бежать с такой компании.
Одно дело - разбираться в разнице flex, grid и block, другое - лезть в дебри того, как браузер это себе интерпертирует. В качестве чтива на вечер - ок, в качестве проверки знаний на интервью - это худший вопрос на свете
Думаю, что речь о подобных парках, например, как в Китае
наберите в поиске "3D wall dinosaur park in China"
Потому что у нас не продается ничего по "рекомендованной цене производителя"??
после конвертации валют и докидывания сверху от каждого участника цепочки, доставляющего карточку от завода до магазине, цена получается в разы больше
и как раз после описанных скидок она может приблизиться к рекомендованной
Что не так с битбакетом? если вы им не пользуетесь, не значит, что он не нужен. Он часть инфраструктуры атлассиан, кто сидит в ней, вполне годный вариант, чем гитхаб лучше?
Здесь дело в том, что у по каскаду идет только max ограничения, но нет самой величины height, если у родителя задать и height и max-height, то проблема исчезнет
Ваша проблема в том, что рынок работает совсем по другому, вы просто закинули картинки на сайт, а вот как проходят популярные проекты:
1- Сперва нужно максимально разлекламировать коллекцию до выпуска (за 2-3 месяца минимум), создав такую атмосферу, что каждый поверил бы в то, что в день запуска она непременно разлетится как горячие пирожки
2 - Сделать минт не самому, а кнопку на вебсайте. Чтобы в день Х любой желающий мог нажав ее, получить картинку на своей кошелек, тогда и цена минта вместе с газом оплачивается покупателем (минты на полигоне считаются для нищебродов и ими никто не пользуется)
3 - И это не считая всяких White List'ов, розыгрышей и прочего прочего
4 - Коллекция должна быть постороена по примеру рпг - от "зеленых" до "легендарных" вещей, есть сервисы, которые оценивают изображение по трейтам и строит рейтинг
Вся суть проекта сводится к аналогу открывания луктбоксов из игр, когда за минимальный прайс 0.05-0.1 ETH человек может себе выбить через минт как шерпотреб, так и легендарку, после перепродав ее.
А так же никто не знает, насколько успешно вы продадитесь, тем самым, возвращаясь к 1 пункту, каждый будет думать, что если он не нажмет минт, то точно будет sold out и потом не успеет, таким образом коллекции и продаются