Евгений
<App store={store} />
В данном случае стор должен быть равен обьектом с initialState или обьектом с функциями стора?
Ilya
Array.prototype.concat x 6,946,886 ops/sec spread operator x 30,036,799 ops/sec
на самом деле там синтетику надо разнообразить - прогнать на большом количестве элементов в массиве, скаже 200K + плюс стоит прогнать на массивах из примитивов и массивах из элементов составного типа (т.е. считай ссылками) Как человек ковырявший движки интерпритации - сразу предрекаю разницу в результатах - но спред в общем и целом должен оказаться производительнее и удобнее в среднестатистическом использовании (хотя для конката можно найти perfomance like сценарии на неординарных массивах) Но если вы топите за опитимизацию сильно - то вам стоит знать еще вот такой факт https://jsperf.com/javascript-array-concat-vs-push/100 Так что push может оказаться еще быстрее 🙂 причем там меньше условностей к гарантии производительности из-за особенностей трансляции в размерности массива C++
Ilya
на самом деле там синтетику надо разнообразить - прогнать на большом количестве элементов в массиве, скаже 200K + плюс стоит прогнать на массивах из примитивов и массивах из элементов составного типа (т.е. считай ссылками) Как человек ковырявший движки интерпритации - сразу предрекаю разницу в результатах - но спред в общем и целом должен оказаться производительнее и удобнее в среднестатистическом использовании (хотя для конката можно найти perfomance like сценарии на неординарных массивах) Но если вы топите за опитимизацию сильно - то вам стоит знать еще вот такой факт https://jsperf.com/javascript-array-concat-vs-push/100 Так что push может оказаться еще быстрее 🙂 причем там меньше условностей к гарантии производительности из-за особенностей трансляции в размерности массива C++
кстти и бенч на маленьких массивах имеется https://www.measurethat.net/Benchmarks/Show/4223/0/array-concat-vs-spread-operator-vs-push push не сильно отстает 🙂
Andrey
а зачем прогонять если есть таблицы временной сложности для методов?
Ilya
а зачем прогонять если есть таблицы временной сложности для методов?
ну вы имеете в виду - сложность алгоритмическую ?
Ilya
ну вы имеете в виду - сложность алгоритмическую ?
кстати она что разве где-то опубликована для сферического в ваккуме JS на сферическом в ваккуме движке ?
Андрей
Как сделать редирект после диспатча?
Ilya
ага
разные движки интерпритации (давайте хотябы V8 и IonMonkey оганичимся), при разных входных условиях (массивы длиннные / короткие, состоящие из примитивов или из ссылок на инстансы составных типов) и т.д. будут задействовать по несколько алгоритмов разных (каждый еще и с подгоночными параметрами) - это во-первых, во-вторых, есть еще такие понятия как оптимизации - они еще накладывают свой отпечаток, а некоторые частные случаи приводят к деоптимизации. Бенчмаркки - это очень хорший способ определения относительно практической истины в вопросах сравнения эффективности и производительности - фактической (на данный момент времени - потому что завтра обновление движка и все может стать с точностью да наоборот 🙂 бывали такие случаи)
Vadim
Как сделать редирект после диспатча?
чем текущий вариант не нравится?
Андрей
Мне кажется что не успевает в сторе поменяться флаг на "авторизован", и уже редирект срабатывает
Ilya
чем текущий вариант не нравится?
видимо там какой ни будь redux-thunk ну и как следствие асинхронный dispatch
Андрей
👌
Ilya
Мне кажется что не успевает в сторе поменяться флаг на "авторизован", и уже редирект срабатывает
скорее всего вы используете middleware который оборачивает вам dispatch в асинхронный вызов. в зависимости от того как это делается - вам необходимо описать логику с учетом этого обстоятельства, если это Promise то использовать «вентиль» then
Ilya
это если нечего делать и заниматься оптимизацией, когда не надо
иногда оптимизацией надо заниматься 🙂 иначе никак ну и знать юаланс по оптимальности позволяет писать код - который гораздо позже приведет вас в состояние когда (см. первый пункт - когда оптимизацией надо заниматься) ну само собой over engineering - для хелоу-ворлдов и пет-проджектов и прочими маленькими проектами
Ilya
для оценки - есть таблицы с приблизительными значениями, для оптимизации - есть специальные команда, все остальное - болтология
коллега а можете подсказать где на эти самые таблицы взглянуть… я не утверждаю что их нет в открытом доступе, но ИМХО я ничего подобного не видел, ну так чтобы прям брать - как оф источник хочу посмотреть что это такое вообще - то о чем вы говорите, можно ссылку ?
Andrey
js performance в гугл, уверен можно найти, так как сам искал 2 месяца назад, добавить в закладки - пользоваться в дальнейшем
Eugene
а как часто вы подчищаете данные в сторе ? 🤔 Например при переходе со страницы назад на прошлую
Ilya
js performance в гугл, уверен можно найти, так как сам искал 2 месяца назад, добавить в закладки - пользоваться в дальнейшем
Эмм, я по такому запросу вижу только обзорные статьи и т.д. А кто вообще их (эти таблицы) публикует это вообще стандартеры или реализаторы интерпритаторов?
Ilya
а как часто вы подчищаете данные в сторе ? 🤔 Например при переходе со страницы назад на прошлую
Стратегия управления состоянием вообще тема сильно зависящая от множества факторов, концепции, архитектуры, иногда вообще чистить стор накладные чем не трогать ничего, жизненный цикл аппликации надо знать
Сергей
пацыки, а что посоветуете годного? Нужно у таблиц колонки двигать под свою кастомную ширину, есть что путевое?
Ilya
а как часто вы подчищаете данные в сторе ? 🤔 Например при переходе со страницы назад на прошлую
если данные нужны только на одной странице то зачем пихать их в глобальный стор?
Oleg
Привет, кто-то в курсе как с помощью propTypes явно задать проп как пустой объект? PropTypes.shape({}) разрешает любые объекты
Ilya
Привет, кто-то в курсе как с помощью propTypes явно задать проп как пустой объект? PropTypes.shape({}) разрешает любые объекты
можно кастомный валидатор писать - проверяйте в нем на Object.keys(target).length см. https://ru.reactjs.org/docs/typechecking-with-proptypes.html
Oleg
а зачем?
кейс у меня такой, проп может быть в зависимости от условий либо пустой либо в формате шейпа
Anton
всем 👋 есть ли какие-нибудь либы, которые превращают значения форм в вебе в payload запроса к api по некоторым правилам? например, есть форма { email: '', firstName: '', lastName: '', ... } если это новый документ, то я хочу убрать из этого объекта ключи, у которых значение — пустая строка. если это уже существующий документ и я его редактирую, то посмотреть на предыдущую версию: если, скажем, поле firstName было заполнено, а теперь пустая строка, то поставить firstName: null. можно, конечно, сделать это всё руками через if/else по каждому ключу, но вдруг есть что-то готовое.
Ilya
кейс у меня такой, проп может быть в зависимости от условий либо пустой либо в формате шейпа
шейп в терминологии propTypes и есть объект, вы имеете в виду либо «пустой» (без пречисляемых свойств) или ккакой-то конкретной структуры (как минимум исходя из приниципа минимально необходимого набора свойств у объекта)
Ilya
ну SPA это в принципе «одна страница» 🙂 так-то
ну в абревиатуре SPA single page значит лишь что страница не перегружается. Но это ведь не значит что этих страниц нет. Просто роутинг со стороны клиента
Ilya
к сожалению его нельзя передать в oneOfType, поэтому не сработает
скомбинируйте PropTypes.exact и кастомный валидатор - вроде проблемы не вижу
Sergey
Oleg
А почему нельзя использовать типизацию?)
что значит 'использовать типизацию'? тайпскрипт?
Ilya
ну в абревиатуре SPA single page значит лишь что страница не перегружается. Но это ведь не значит что этих страниц нет. Просто роутинг со стороны клиента
когда, вернее «как правило» аппликация которая использует контроллер состояния - то в ней роутинг на это дело крепится «клей-моментом», быть в экосистеме с стоянием и не использовать его для хранения и подписки к данным для атомарного «роута» это какой-то зашквар… если я правильно понял претензию, мол «если данные нужны только на одной странице (роуте)...»
Сергей
Ребят, а пожскажите пожалуйста. Требуется синхронизовать значение у компонента. <a> <b> <C - меня> <d - меня> В ангуляре это можно было сделать через сервис. А тут нужно прокидовать a-b-c цепочку?
Vlad
кто-то сталкивался с таким?
Ilya
что значит 'использовать типизацию'? тайпскрипт?
значит использовать TypeScript с React и гуглить в эту сторону заранее стоит понять что есть небольшая разница - propTypes в рантайме в dev режиме работает TypeScript это проверки исключительно на уровне сборки
Ilya
кто-то сталкивался с таким?
листинг кода - где эксеепшн срабатывает дайте на codesandbox иначе тяжело что-то подсказать
Vlad
код кидай
не могу. Ошибка падает, когда я из редьюсера возвращаю isFetching: false. Чтобы спинер переставал крутиться
Vlad
Только вот я вообще не понимаю как это связано
Сергей
Не до конца ясно что к чему. Типа в компонентах 3 и 4 уровня должно быть единое значение?
Да, значение из родителя нужно прокинуть в глубь более чем на один уровень
Sergey
не могу. Ошибка падает, когда я из редьюсера возвращаю isFetching: false. Чтобы спинер переставал крутиться
Дебажить код по сообщениям в чате так себе затея. Научись пользоваться debugger, DevTools, console.log
Oleg
Или флоу
я не принимаю таких решений на проекте
Сергей
А без redux такое делается?
Oleg
похвально, значит мои пояснения вам не пригодятся, в чем собственно проблема ?
ни в чем, просто забавны попытки поумничать не в тему)
Vadim
ни в чем, просто забавны попытки поумничать не в тему)
По моему он все норм написал и очень даже в тему.
Victor
А без redux такое делается?
Ответил же - контекст.
Ilya
ни в чем, просто забавны попытки поумничать не в тему)
очень странно видеть такую реакцию на желание помочь… ну что-ж, извините что «уж больно умные даю пояснения», специально для вас - больше не стану так усердствовать
Oleg
Соболезную
Я инициировал обсуждение на тему внедрения тайпскрипта, но у нас он не будет очень полезным, потому что все покрывается тестами
Sergey
Типы защищают от некоторых ошибок до запуска тестов. Ну и от написания тестов на типы
Sergey
А ещё типы это структура кода
Евгений
Есть компонент который берет из редакса стейты и пропихивает в пропсы себе, через export default withRouter(connect(mapStateToProps, mapDispatchToProps)(...)); каким образом в jest можно реализовать проброс из стора в пропсы?
Oleg
Тесты и типы это вообще разные вещи
я не хочу спорить, у меня нет на это времени. В конечном итоге и то и другое - инструмент обеспечения надежности приложения
Ilya
Я инициировал обсуждение на тему внедрения тайпскрипта, но у нас он не будет очень полезным, потому что все покрывается тестами
аргумент «покрытия тестами» не совсем оправдывает отказ от «покрытия типами»… как бы немного разные сопсобы повышения качества кодовой базы и удобств разработки
Sergey
Типы это не только надёжность. Но и понятность, которую тесты не дают
Oleg
Типы это не только надёжность. Но и понятность, которую тесты не дают
херово у вас тесты значит пишут, раз по них нельзя понять как работает тестируемая сущность
Sergey
function get(user) {} какие поля у user?