artalar
Ну ок
⩔wein
По хорошему к стору должен быть подключен компонент текущей страницы. И все, на этой странице все остальные компоненты получают данные через пропсы, если очень сложная структура - возможно через локальный контекст. Другие подключенные к стору компоненты могут быть - навбар, система навигации, система отображения ошибок и т.д.
⩔wein
Почему 1-пункт плохо? По второму: У тебя на странице минимум 20 товаров. Как ты будешь доставлять им данные?
Первый пункт не всегда плохо конечно, но зачастую. В подавляющем большинстве случаев данные инпута это локальный стейт компонента, его не нужно выносить за пределы компонента. Вообще библиотеки форм которые хранят данные напрямую в редаксе это зло. А так конечно есть исключения, инпут для поиска какой например. В некоторых случаях его удобней положить в редакс.
⩔wein
Не рекомендую считать ваше видение архитектуры единственно верным.
Это не мое виденье архитектуры. Это рекомендуемый метод использования редакса от авторов редакса. От того же Абрамова.
Sergey
По второму - через пропсы.
Таким образом, любое изменение стора тригерит всё через пропсы в низ по дереву
⩔wein
> Вообще библиотеки форм которые хранят данные напрямую в редаксе это зло Почему зло?
Потому что это медленно и не идиоматично. Локальный стейт компонента должен хранится в компоненте, а не в редакс сторе.
⩔wein
Таким образом, любое изменение стора тригерит всё через пропсы в низ по дереву
Конечно нет, каждый товар получит пропсы имеющие отношение только к этому товару и ререндеринг произойдет только при необходимости(ie - изменении пропсов касающихся этого товара)
⩔wein
И?)
Ну. Если использовать библиотеку не так, как ее рекомендуют использовать - конечно будут проблемы.
artalar
Ну. Если использовать библиотеку не так, как ее рекомендуют использовать - конечно будут проблемы.
Кто рекомендует? Абрамов не писал и не пишет на редаксе, а весь его опыт ограничен одной компанией.
⩔wein
Корневой вопрос. Почему это медлено?
Потому что обновление глобального стора медленней чем обновление локального стейта, как бы это ни было реализовано.
⩔wein
При любом обновлении стора нужно делать проверки "поменялись ли данные или нет".
поверхностное сравнение работает настолько быстро что это начнет иметь значение с десятков тысяч элементов
artalar
Хмм. В чем?
Приведу небольшую аналогию https://twitter.com/mweststrate/status/1162775324830130177
artalar
И это при условии что у нас идеальная нормализация и мемоизация
⩔wein
Пары сотни на мобилке достаточно что бы это начало влиять на UX
Эм, да ну. DOM медленный, а мы DOM не трогаем. Сравнить пару сотен обьектов поменялись ли они или нет - занимает доли микросекунды даже на лоу-энд смартах.
artalar
В общем я подытожу и пойду https://t.me/react_js/757614
⩔wein
Если бы это было так, то не появился тот же mobx.
Не понял связи. Стейт менеджмент нужен в любом случае. Мы же не будем пропсы по всему дереву пробрасывать, вверх-вниз, через кучу бранчей. Это безумие. Но стейт менеджмент это не средство оптимизации производительности, это средство управления состоянием приложения. Тем более что все популярные сейчас СМ появились в раннюю стадию развития реакта и сейчас нужда в них - куда меньше.
⩔wein
Сейчас есть контекст апи, большая часть проблем с пробросом пропсов на разную глубину решается через него.
artalar
Удивительно, но использование нового контекста негативно влияет на перф
artalar
И держать и перепробрасывать данные через реакт тоже не всегда лучшая идея впринципе
artalar
Намекну еще раз https://t.me/react_js/757614
⩔wein
Удивительно, но использование нового контекста негативно влияет на перф
Честно говоря с трудом представляю случаи когда это действительно важно. Медленно все что связано с DOM, остальные вещи обычно доли процента от производительности занимают.
⩔wein
Если это реально так не затратно, тогда откуда эти аргументы? https://t.me/react_js/757626
Оверхед передачи данных через контекст - достаточно незначителен. Тем более что мы все равно все так и так через контекст передаем. Сохранение данных в глобальный стор на каждое нажатие клавиши.. В большинстве случаев тоже не значительно, только что неудобно. Локальный стейт просто и удобнее и еще и быстрее.
⩔wein
Что mobx, что реакт контекст используют для передачи данных, подозреваю что и reatom
Sergey
?
https://t.me/react_js/757649
⩔wein
Я не понимаю зачем такие вопросы спрашивать. Я не идиот вроде. Если есть какой-то поинт можно сразу его сказать
Sergey
Я не понимаю зачем такие вопросы спрашивать. Я не идиот вроде. Если есть какой-то поинт можно сразу его сказать
Reatom, Effector, MobX позволяют делать точечные апдейты и точечные подписки. Если кратко.
⩔wein
Reatom, Effector, MobX позволяют делать точечные апдейты и точечные подписки. Если кратко.
Хмм, в каком смысле позволяют? С редаксом тоже можно каждый компонент в connect завернуть и получить тот же результат, просто это убивает реюзабилити.
Kurzdor
Вообщем народ, посмотрел я Мобкс вроде то что нужно, но есть странные моменты и не нравится форс декораторов, но мобкс похож на полюбившийся Vuex Посмотрел Redux, но меня смущает то что если хочешь дать доступ компоненту к стору то нужно писать mapState/DispatchToProps и коннектить + писать мешанину на экшн (мешанина = связка из константов + переброс этого всего в нужные свитчи)
Kurzdor
Редакс как мне кажется усложняет Эффекторы/реатом в топку
Kurzdor
а, тьфу, какие декораторы в функциональных компонентах с хуками туплю
⩔wein
начиная с v6 они mobx-react-lite вмержили и там декораторы не обязательны/не нужны
Kurzdor
хотя тьфу, путаю опять декораторы в сторах
Kurzdor
⩔wein
Это старый пример явно. Открой офф документацию, там нигде декораторов нет.
⩔wein
https://mobx-react.js.org/
Kurzdor
Это старый пример явно. Открой офф документацию, там нигде декораторов нет.
тогда нужно писать decorate(User, { fullName: observable, setFullName: action, })
Kostya
Вопрос, прощу поделиться опытом) Нормально ли это ! не разделять роутера на приложение а роутеры разделять на уровне компонентов. То есть умя есть формируется контент ивзависимости это для админа или для пользователя! И в самых далеких потомкой будет вот такое let User_or_Admin = (props) => ( <Switch> <Route path="/" exact component={() => <Info {...props} />} /> <Route path="/admin" component={() => <EditAdmin {...props} />} /> </Switch> )
Dmitriy
Ладно, у меня лапки и я спать, я пытался
Ого ты ещё как долго пытался)
Kurzdor
Народ, а что дает мне использование redux-thunk?
Evoke
Народ, а что дает мне использование redux-thunk?
Возможность создавать сложных action, которые могут быть асинхронными и имеют в любой момент времени доступ к state.
Kurzdor
а возможно показать пример кода, хоть и небольшого и обьяснить на нем? буду очень благодарен
Kurzdor
я вроде понял, но лучше понимаю на коде/примере
Evoke
В официальной документации по redux-thunk куча примеров и подробно разобрано, если какой-то из них вы не понимаете, давайте о нем и поговорим.
Viktar
Подскажите, пожалуйста, в React предпочтительнее (в тренде) использовать компоненты-классы или компоненты-функции?
Kurzdor
Подскажите, пожалуйста, в React предпочтительнее (в тренде) использовать компоненты-классы или компоненты-функции?
в тренде выбросить класс компоненты и юзать хуки но иногда стоит использовать классы, когда именно я не знаю
Kurzdor
на картинку object-fit: cover; и @css_ru я имею ввиду туда вопрос надо было
⇺Goga⇻
Подскажите, можно ли одновременно запустить 2+ функции? У меня есть 2+ клавиши и каждая привязана к определенному звуку.
⇺Goga⇻
всмысле
Хочу написать пианино
Kurzdor
Хочу написать пианино
если вы про комбинации клавиш, то https://medium.com/@melwinalm/crcreating-keyboard-shortcuts-in-javascripteating-keyboard-shortcuts-in-javascript-763ca19beb9e
Kurzdor
а так просто на каждую клавишу функцию, которая принимает индекс/key по которому запускаешь аудио
Kurzdor
Хочу написать пианино
помочь может это https://howlerjs.com/ и https://www.npmjs.com/package/react-howler
⇺Goga⇻
Доступа к ПК нет
Artur
Ребята, немного не понимаю как сделать ссылку с одного компонента на другой. Так чтобы при клике на компонент рендерись его чаилды. Как это реализовать? Вот графика описания задачи.
Artur
Это мне ответ. Если что я хотел бы чтобы подкомпоненты рендерились отдельно, по новоту роуту.
Ilya
Добрый день! Есть компонент который выводит оформленный массив через map. Как избежать ререндера всех кмпонентов если в массиве изменился только один?