Azamat
Да, но все равно не хватает ещё инфы
тогда конкреные вопросы шли, что непонятно
Solnur
Синглстор, это когда у тебя 1 источник правды Мультистор, десятки > как это синглстор с плюсами мультистора? См. ситуация в мультисторах (часто их за это любят) const store1 = new Store() const store2 = new Store() ... const store100 = new Store() const store1.subscribe(() => {}) const store2.subscribe(() => {}) Каждый стор имеет свою очередь подписок, за счёт чего оповещение подписчиков банально быстрее происходит (меньше функций вызывать). Это касается всех мультисторов. Вот пример плохой ситуации с синглстор в Redux (одно из самых слабых мест), т.к. создаётся одна очередь подписок которая дёргается на каждое изменение стора. const store = createStore() store.subscribe(() => {}) store.subscribe(() => {}) // etc store.subscribe(() => {}) Вот кейс как это в Reatom выглядит const store = createStore() store.subscribe(UserAtom, () => {}) store.subscribe(CartAtom, () => {}) // etc store.subscribe(ProductsAtom, () => {}) В сторе каждый атом имеет свои очедери подписок, за счёт чего доставка данных осуществляется за минимальное кол-во шагов. Тоже самое касается и обработки данных, т.к. экшены подадают сразу в нужные обработчики (а не пронизывают ВСЕ редьюсеры, как редакс)
спасибо за подробное объяснение
Sergey
спасибо за подробное объяснение
Ну это самое лайтовое. Мультисторы имеют свои проблемы, из-за которых многим не заходят. В частности особенности переноса состояние при SSR, консистентность данных.
Ivan
Да, но все равно не хватает ещё инфы
кроме тутора Рецепты — https://redux-saga.js.org/docs/recipes/ Апи — https://redux-saga.js.org/docs/api/ дальше уже самому шишки набивать и в чатик писать
Мадияр
Спасибо парни! Вы лучшие
Bogdan
группа по реатому есть?
Bogdan
Синглстор, это когда у тебя 1 источник правды Мультистор, десятки > как это синглстор с плюсами мультистора? См. ситуация в мультисторах (часто их за это любят) const store1 = new Store() const store2 = new Store() ... const store100 = new Store() const store1.subscribe(() => {}) const store2.subscribe(() => {}) Каждый стор имеет свою очередь подписок, за счёт чего оповещение подписчиков банально быстрее происходит (меньше функций вызывать). Это касается всех мультисторов. Вот пример плохой ситуации с синглстор в Redux (одно из самых слабых мест), т.к. создаётся одна очередь подписок которая дёргается на каждое изменение стора. const store = createStore() store.subscribe(() => {}) store.subscribe(() => {}) // etc store.subscribe(() => {}) Вот кейс как это в Reatom выглядит const store = createStore() store.subscribe(UserAtom, () => {}) store.subscribe(CartAtom, () => {}) // etc store.subscribe(ProductsAtom, () => {}) В сторе каждый атом имеет свои очедери подписок, за счёт чего доставка данных осуществляется за минимальное кол-во шагов. Тоже самое касается и обработки данных, т.к. экшены подадают сразу в нужные обработчики (а не пронизывают ВСЕ редьюсеры, как редакс)
минус этого - тригер? какие еще есть недостатки моностора?
Sergey
Bogdan
О каком тригере речь? Не совсем понял.
ну , моностор, подписка на весь обьект, ридакс тригернет всех, а в мульти свой стор - своего подписчика
Sergey
ну , моностор, подписка на весь обьект, ридакс тригернет всех, а в мульти свой стор - своего подписчика
У реатома ты подписываешь именно на части стора (атомы). Таким образом, что подпичику не нужно, то он и не получит.
endifai
может кто знает. Есть навбар, который скроллится по оси x, как реализовать, чтобы активный таб всегда был виден?
endifai
на флексе он
Bogdan
Проблемы с перфом
ну это да, я думал может еще что то есть
Yury
на флексе он
ну вообще к реакту особо нету отношения. Не вижу твою верстку, но решение напрашивается в добавлении определенных стилей активному табу
Kurzdor
ну это да, я думал может еще что то есть
А, кстати да, ты заебешся писать экшны/редьюсеры, они имеют глобальный редьюсер, который при диспатче экшне проходится по всему
Roman
sa
Эльдар
привет, можно ли новичку начать с React в действии или лучше сначала ознакомиться с книгой по чистому javascript?
endifai
спасибо
Эльдар
нет, сначала JS
посоветуйте какой-нибудь must read, не считая документации. флэнаган, что-то другое?
Kurzdor
createSlice
Тянуть тулкит на 8кб 👍
Sergey
Проблемы с перфом
...при условии одной очереди обработчиков и подписчиков. Это не проблема синглстора, а только некоторых его разновидностей.
Alexey
на ассемблере пиши, там и памяти меньше расходоваться будет, а то как же, 2020 год, а веб-приложения сотни мегабайт оперативки жрут
Victor
посоветуйте какой-нибудь must read, не считая документации. флэнаган, что-то другое?
https://learn.javascript.ru/ 1-5 параграфы обязательно. Плюс 11 параграф. Это минимум, после которого про ДОМ почитать.
Эльдар
всем спасибо!
Ivan
всем спасибо!
Сверху помазать you don’t know JavaScript
Dmitry
посоветуйте какой-нибудь must read, не считая документации. флэнаган, что-то другое?
если видео, то эти лекции можешь глянуть, но это не совсем для начинающих https://habr.com/ru/post/434686/
Cybernated
Ребят. всем дарова, кто может помочь с этой ошибкой? Она случилась после установки пакета i18n
Иван
Доброго всем времени суток! У меня компонент, который рендерит таблицу на тегах див из таблицы на tr, td. На вход в пропсы первоначально попадает html разметка tr, td. Таблица рендерится рекурсивно, саму рендеринг я написал. Далее надо сделать, чтобы шапка с классом row-fixed фиксировалась, а колонки с col-fixed при прокрутке упирались в края таблицы, вся остальная таблица прокручивалась при этом
Иван
Я реакт только начал изучать, на чистом js подход у меня такой: взять дом элемент с классом row-fixed, повесить слушатель события скролл таблицы, менять свойство css top на величину прокрутки вниз
Иван
А как на реакте?
Kalebra
А как на реакте?
через ref - это типо как гет элемент а ещё могу посоветовать библу антд
Azamat
position: sticky?
беда с поддержкой в браузерах. Впрочем, это уже не про реакт
Kalebra
А как на реакте?
https://ant.design/components/table/#components-table-demo-fixed-header
Oleg
беда с поддержкой в браузерах. Впрочем, это уже не про реакт
не реакт. современные браузеры поддерживают. Если IE не нужен, то вообще отлично.
Vadim
Иван
position: sticky?
Позишн релятив, я думал может fixed или absolute, но тогда они вырываются из потока, и вся таблица сдвигается
Иван
почему?
Старший товарищ программист говорит, будет мешать остальной вёрстке
Sergey
также)
можно через ref достать ссылку на хедер, сетить можно через style prop или по рефу...
Andrey
Стики нельзя, так как с ними беда периодически (ломается поддержка в браузераз типо сафари и хрома)
Andrey
в 1 версии все ок, в след - не все ок
Sergey
Ref использовать не рекомендуется? я слышал
если тебе нужно работать с текущими нодами и геометрией, как без этого? ну может там onScroll хватит обработчика и из ивента брать ссылку на ноду
Sergey
есть ряд задач где они нужны, это довольно скромный список и не каждодневные таски, если ты строишь интерфейсы какие... данные рисуешь в таблицы... обычно при построении компонентов они нужны, каких-то графиков, свг, канвас... тот же скролл на js запилить возможно потребуются
Sergey
антипаттерн это вместо обработки стейта и чтобы реакт ререндерил дерево компонентов, влезать в него через них самому...
No Name
Ребят, подскажите как лучше плиз!У меня есть товар кофе, делаю мап,получаются карточки, по нажатию добавляется в корзину и считается тотал.По некоторым позициям нужно сделать размеры , следовательно у стандарта меняются цена,вес итд { id: 218, title: "latte", size: { S: { weight: 10, price: 30 }, M: { weight: 12, price: 40 }, L: { weight: 15, price: 50 } }, Сделать что-то типа такого?И внутри карточки писать что если есть size то Object.entries и так далее, или есть метод поэффективнее? Либо вообще делать разные позиции и разные id и как-то сгруппировать
Victor
Но лучше переделать на массив объектов, т.к. порядок элементов в объекте не детерменирован: sizes: [{ size: 'S', weight: 1 }, { size: 'XL', weight: 2 }]
Dmytro
Народ помогите понять как сделать сортировку внутри компонента. У меня есть collection который я беру из redux const collection = useSelector((state:any) => [{'name':'one'},{'name':'two'},{name'=>'three'}]);// потом я создаю локальный useState const [mutableCollection, setCollection] = useState([...collection]) // потом я создаю mutableCollection // функция сортировки let copyCollection=[...mutableCollection]; copyCollection=copyCollection.filter((elem)=>{ if(elem.name.toLowerCase().includes('two')){ return true; } }); setCollection(copyCollection);Сортировка работает, но когда я меняю collection в redux, то mutableCollection новый не создается, а используется старый. Как это пофиксить?
No Name
Но лучше переделать на массив объектов, т.к. порядок элементов в объекте не детерменирован: sizes: [{ size: 'S', weight: 1 }, { size: 'XL', weight: 2 }]
а не будет конфликта в корзине, есть в нем будет 2 кофе разных размеров но с одинаковым id? Или же сделать по нажатию на кнопку размера setPrice и отправлять наверх? В данный момент по клику на карточку,просто отправляю наверх сам item
Alexander
Кто-нибудь пользуется validate.js? У него есть встроенные валидаторы, например numericality, в который можно ввести условие (напр onlyInteger: true) и кастомное сообщение для него (notInteger: "message"). Так вот у этого валидатора есть ещё дефолтное значение общее для всего объекта numericality которое выводит сообщение "{value} is not a number", и если его переназначить через свойство объекта message то оно начинает перекрывать собой все остальные валидаторы, то есть в любом валидируемом случае выкидывает прописанное сообщение из message. По дефолту такое поведение не происходит. Собственно нужно кастомизировать это сообщение и чтобы оно при этом не перекрывало остальные, никто не знает как это делается?
No Name
очевидно что уникальностью будет являться id товара + его размер
То есть нормальным вариантом будет сделать хук цены внутри самой карточки и при нажатии формировать товар?
max
import data from '../products'; const initialState = { data: data }; const reducer = combineReducers({ filter: filterReducer, }); const devtools = window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(); export const store = createStore(reducer, initialState, devtools); Всем привет. Подскажите, почему в стор не попадает data?
Victor
То есть нормальным вариантом будет сделать хук цены внутри самой карточки и при нажатии формировать товар?
Не уверен, что понимаю что такое "хук цены" )) С такими проблемами хорошо помогает пример на codesandbox каком-нибудь
max
Ничего 🙁 undefined
Victor
Ничего 🙁 undefined
https://redux.js.org/api/createstore/
Victor
?
[preloadedState] (any): The initial state. You may optionally specify it to hydrate the state from the server in universal apps, or *to restore a previously serialized user session*. If you produced reducer with combineReducers, *this must be a plain object with the same shape as the keys passed to it*. Otherwise, you are free to pass anything that your reducer can understand.