Как же мне нравятся веб приложения за то что я могу открыть сколько угодно их инстансов одновременно. Для социалок и маркетплейсов особенно удобно.
👍5
Если во время написания и множественных перезапусков тестов обнаружилась ошибка кеша апишки, стоит ли это включать в тест?)
Правильный ответ - стоит включать в нагрузочное тестирование. А если его нет, стоит ли раздувать бизнесовые тесты?
Правильный ответ - стоит включать в нагрузочное тестирование. А если его нет, стоит ли раздувать бизнесовые тесты?
👍1
Дауж, cypress это тот еще склад костылей. Хотя, не то что бы это его вина.
Задача проще некуда - изменить значение в инпуте. Не с клавиатуры, а целиком заменить (а что если пользователь делает ctrl+A, ctrl+V). Заклинание выглядит так:
Оказывается, реакт на такое изменение не тригериться. Как ему подсказать? В ишье предлагают события тригерить. Правда, какие - не ясно. Что-то у кого-то работает, что-то нет.
Я придумал простое
Не знаю что. Сижу, пытаюсь понять, почему в двух разных текстариах из разных инстансов одного и того же компонента где-то значение меняется, а где-то нет.
Задача проще некуда - изменить значение в инпуте. Не с клавиатуры, а целиком заменить (а что если пользователь делает ctrl+A, ctrl+V). Заклинание выглядит так:
.invoke('val', newValue). Работает? Да. А если палочкой потыкать? Нет.Оказывается, реакт на такое изменение не тригериться. Как ему подсказать? В ишье предлагают события тригерить. Правда, какие - не ясно. Что-то у кого-то работает, что-то нет.
Я придумал простое
.type("0{backspace}”). Работает? Да. А если палочкой потыкать? Да. А если другой палочкой потыкать? Нет. Что? Не знаю что. Сижу, пытаюсь понять, почему в двух разных текстариах из разных инстансов одного и того же компонента где-то значение меняется, а где-то нет.
GitHub
can't trigger 'onChange' for an input type='range' rendered by React · Issue #1570 · cypress-io/cypress
Current behavior: ... return ( ... <div className="search-bar__form-range"> <input type="range" min={10} max={900} step={10} value={500} onC...
🤔4👍1
artalog
Дауж, cypress это тот еще склад костылей. Хотя, не то что бы это его вина. Задача проще некуда - изменить значение в инпуте. Не с клавиатуры, а целиком заменить (а что если пользователь делает ctrl+A, ctrl+V). Заклинание выглядит так: .invoke('val', newValue).…
Окидокики, текстария в которой все работало маунтилась прям перед изменением, а не работало там где компонент уже давно лежал в дереве. Не уверен что там именно происходит, да и не хочу, мб файнал форм на фокус что-то ререндерит.
Но пофиксил добавлением
Но пофиксил добавлением
focus() перед invoke.👍1
На прошлой неделе я болел, поэтому было тихо.
Что-то мне в голову стрельнуло, попытаюсь каждый день делать какой-то пост. Нужно еще время выбрать, скорее всего это будет 11-00 по gmt-3.
Что-то мне в голову стрельнуло, попытаюсь каждый день делать какой-то пост. Нужно еще время выбрать, скорее всего это будет 11-00 по gmt-3.
С самого начала у меня были претензии к системе модулей ЖС в том что она не позволяет полностью заменить IoC / DI.
Яркий пример, почему это проблема - jest.mock. Необходимость в таком инструменте уже говорит о том что с архитектурой что-то не так. Ну и с нативными импортами оно ломается (на сколько я знаю, мб что-то поменялось).
Сейчас разрабатывается предложение import-maps, но полноценный DI оно заменить не сможет.
Почему я вообще думаю что это должно быть в платформе? Потому что это базовый паттерн и мешаться он точно не будет. И текущие решения ни разу не lightweight и зависят от нестандартизированных компайл-тайм апишек.
P.S. или не нужно было импорты модулями обзывать, это какой-то file linker, не знаю.
Яркий пример, почему это проблема - jest.mock. Необходимость в таком инструменте уже говорит о том что с архитектурой что-то не так. Ну и с нативными импортами оно ломается (на сколько я знаю, мб что-то поменялось).
Сейчас разрабатывается предложение import-maps, но полноценный DI оно заменить не сможет.
Почему я вообще думаю что это должно быть в платформе? Потому что это базовый паттерн и мешаться он точно не будет. И текущие решения ни разу не lightweight и зависят от нестандартизированных компайл-тайм апишек.
P.S. или не нужно было импорты модулями обзывать, это какой-то file linker, не знаю.
👍6
reduce nanoid bundlesize
Это уже становится хобби 🙂 Захожу раз в несколько месяцев в нано библиотеки Андрея Ситника и пытаюсь придумать как бы уменьшить их бандлсайз.
Это особенно увлекательно из-за того что Андрей сам большой спец в этом вопросе и найти какие-то оптимизации каждый раз очень сложно.
Вчера посчастливилось придумать оптимизацию, которая срезает 12% размера nanoid - доволен как слон 🤗
Кому интересны детали, обратите внимание на то что коммита два.
Это уже становится хобби 🙂 Захожу раз в несколько месяцев в нано библиотеки Андрея Ситника и пытаюсь придумать как бы уменьшить их бандлсайз.
Это особенно увлекательно из-за того что Андрей сам большой спец в этом вопросе и найти какие-то оптимизации каждый раз очень сложно.
Вчера посчастливилось придумать оптимизацию, которая срезает 12% размера nanoid - доволен как слон 🤗
Кому интересны детали, обратите внимание на то что коммита два.
🔥12
Вот вам небольшая задачка на асинхронщину. Какой будет лог для каждой функции и какое из трех поведений использует реакт?
С
П
О
Й
Л
Е
Р
codesandbox
Наверное, реакт не батчит useEffect потому что в замыкании все равно предполагается старое иммутабельное значение, а не последнее по рефу.
Но в реальной жизни для описания какой-то логики и процессов нам нужны как минимум две очереди с разными приоритетами. Доказательством служит появление микротасков в платформе.
В некст реатоме, кстати, будет апишка для двух разных очередей.
С
П
О
Й
Л
Е
Р
codesandbox
Наверное, реакт не батчит useEffect потому что в замыкании все равно предполагается старое иммутабельное значение, а не последнее по рефу.
Но в реальной жизни для описания какой-то логики и процессов нам нужны как минимум две очереди с разными приоритетами. Доказательством служит появление микротасков в платформе.
В некст реатоме, кстати, будет апишка для двух разных очередей.
🤔2