
Арсений
08.12.2016
20:21:46
>ну мне например надо было несколько функций чтобы было совмещено, inline edit, пагинация, сортировка, кликабельность строк. реализация на datatables + jquery - вполне понятная, ui-grid (под angular) - сделал за пол-дня, на реакте вот что-то никак
Что подразумевается под inline edit?


Дмитрий
08.12.2016
20:21:55
Я сейчас не использую редакс, но в те времена когда использовал я хранил чисто хеш таблиц с хешем айдишников и объектов без отдельного массива айдишников. И у меня был только один редюсер который автоматически обрабатывал все экшины для всех таблиц. То есть вместо ADD_USER я пишу dispatch({type: 'add', table: 'user', record: {...}}) и также с обновлением - dispatch({type: 'update', table: 'user', recordId: 123, mutation: {....}}) и третий экшин у меня был dispatch({type: 'delete', table: 'user', recordId: 123}). Больше кастомных экшинов не было. А один единственный редюсер перехватывает эти три вида действий - add, update, delete и расфасовывает по айдишникам объекты в состоянии и получаем вот такое состояние
{
users: {
1: {id: '1', name: 'user1', boards: ['1','2','3']},
2: {id: '2', name: 'user2', boards: ['2','3','4']},
}
boards: {
1: {id: '1', title: 'board1',user: '1',posts: ['1','2','3']},
2: {id: '2', title: 'board2',user: '2',posts: ['2','3','4']},
}
posts: {
1: {...}
2: {...}
}
}
То есть у нас данные в полностью нормализированном состоянии и мы во всем приложении диспатчим всего три типа экшинов - add, update, delete, передавая параметром имя таблицы, и таким образом у нас один редюсер автоматически обрабывает все за нас и мы больше не пишем редюсеры и экшины на каждый чих
Экшны служат для документации происходящего, поэтому хоть какое то объявление у них желательно


Oleg
08.12.2016
20:25:05
Мне подход Богдана близок, но я всетаки склоняюсь что нормализованные коллекции в стейте редаксового стора для каждого идентифицируемого переиспльзуемого контрола хранятся, а вот такие универсальные экшены как раз дополнительно при успешном изменении диспатчатся и влекут за собой обеспечение когерентности во всех стейтах для компонент
в итоге храним только то что показываем

Google

Дмитрий
08.12.2016
20:30:31
Каждый экшн должен быть атомарным, то есть желательно не допускать некогерентного состояния между ними изначально
Каждый редюсер может реагировать на любой экшн абсолютно по своему, можно отталкиваться от этого и сразу писать когерентные нормализованные данные

KlonD90
08.12.2016
20:32:45
На что вы заменяете момент?

Aleh
08.12.2016
20:34:05

Oleg
08.12.2016
20:34:25
На самом деле 90% всего это CRUD, и вполне естественно что появляются коллекции с универсальными экшенами. Богдан судя по всему делал все с этой мыслью.

Bogdan
08.12.2016
20:34:46

Aleh
08.12.2016
20:35:02

Дмитрий
08.12.2016
20:35:20
Согласованное

Aleh
08.12.2016
20:35:54
типа каждый экшн не ломает инвариант
окей
понял)
никакой экшн не может привести систему в неправильное состояние, проще говоря

Google

Дмитрий
08.12.2016
20:36:25
Да

Oleg
08.12.2016
20:36:33
redux не противоречит crud, ровно как не противоречит концепции создания переиспользуемых компонент

Aleh
08.12.2016
20:36:56
конечно не противоречит, просто кода много

Oleg
08.12.2016
20:37:29
просто в redux для этого прийдется иметь 1 универсальный редьюсер и фабрику экшенов под каждый тип компонент

KlonD90
08.12.2016
20:37:50
Вот есть кстати красивый нормализованный стейт. Как его очищать от лишних данных?

Aleh
08.12.2016
20:38:36
господь дал вам js объект, в котором может быть любая вложенность
накой черт делать что-то реляционное?)

Дмитрий
08.12.2016
20:39:03
redux против вложенности

KlonD90
08.12.2016
20:40:08

Bogdan
08.12.2016
20:40:47
накой черт делать что-то реляционное?)
а как с чистой вложенностью моделировать дерево в редаксе? тебе нужно обновить объект на 100-ом уровне вложенности - тебе с редаксом нужно будет вернуть новые объекты всех родителей всех 99 уровней вверх а это будет тормозить

Oleg
08.12.2016
20:41:37

KlonD90
08.12.2016
20:41:46

Aleh
08.12.2016
20:41:46

KlonD90
08.12.2016
20:42:08

Aleh
08.12.2016
20:42:27

Дмитрий
08.12.2016
20:42:35
Ну это да

Aleh
08.12.2016
20:44:05
связанные аггрегаты конечно лежат отдельно, но сам аггрегат вполне себе лежит целеньким

Oleg
08.12.2016
20:44:28
Соотвественно возникает необходимость в понимании что сейчас не показывается и требуется стратегия вытеснения из кеша

Google

KlonD90
08.12.2016
20:45:20

Oleg
08.12.2016
20:45:26
как понять что данные не показываются уже никем и их можно вытеснить?

Aleh
08.12.2016
20:45:50

Дмитрий
08.12.2016
20:45:59

Aleh
08.12.2016
20:46:19
this.props.nextPage()
или как там

Oleg
08.12.2016
20:47:14
вот все эти вопросы и привели меня к тому что стейт под контрол, но при успешном изменении записи все пытаются навести в своих стейтах когерентность

Дмитрий
08.12.2016
20:47:50
Что значит пытаются? redux — это конечный автомат состояний
Он перещёлкивается как реле

Aleh
08.12.2016
20:48:16

Дмитрий
08.12.2016
20:48:19
Он не должен пытаться, он просто должен делать максимально простые действия по хлопку
Кстати

Дмитрий
08.12.2016
20:51:26
WeakMap

Oleg
08.12.2016
20:51:50
не придирайся. я говорю про то что когда ты изменяешь запись и после успешного запроса диспатчишь SOME_SUCCESS, то следом диспатчится еще какой-нибудь ITEM_CHANGE, который слушают все, кто заинтересован в этой коллекции и по его содержанию изменяют свои состояния

Aleh
08.12.2016
20:52:01
WeakMap
они тогда ж не успеют в компонент попасть)

Vladimir
08.12.2016
20:52:10

Ҫѐҏӗѫӑ
08.12.2016
20:55:58
ну мапы с сетами да
разве что

Дмитрий
08.12.2016
20:57:07
Я понял

Google

Дмитрий
08.12.2016
20:57:23
Тогда redux просто не вариант
Тут действительно нужна либо структура на Weak*, либо какой-то алгоритм, определяющий актуальность данных

Ҫѐҏӗѫӑ
08.12.2016
20:58:17
я начала истории не читал если что, просто влез позанудничать

Дмитрий
08.12.2016
21:00:21
Но алгоритм актуализации кэша абстрагирован от стора, ему технически всё равно кому говорить "отчистись", redux, redis или чему то ещё

Dmitry
08.12.2016
21:01:08
Лал

Дмитрий
08.12.2016
21:02:03
Или я по прежнему не понимаю, чего вы хотите) Началось всё с нормализации, которая не является вопросом актуализации кэширования

Damir
08.12.2016
21:02:11
почему так не популярен https://github.com/Volicon/NestedLink ? вроде годное решение для валидации

Bogdan
08.12.2016
21:05:52
ага, может быть либо вложенность 2, либо 100. Иначе прям никак - -
На самом деле нормализация в редаксе это зло, поэтому я использую mobx - там хоть вложенность в виде дерева, хоть циклические ссылки между объектами (объект юзера может хранить массив объектов тодо а каждый объект тодо хранит ссылку обратно на объект юзера) - все это просто блаженство после редакса))

Ches
08.12.2016
21:18:57
находил кто нибудь https://www.udemy.com/the-complete-react-native-and-redux-course/ где скачать? от Stephen Grider

Admin
ERROR: S client not available

Yung
08.12.2016
21:20:41
А не, вру, нет там нейтива

Ches
08.12.2016
21:21:37
ага, и в гугле тоже не нашел(

Adel
08.12.2016
21:24:23

Дмитрий
08.12.2016
21:27:12
"Проблем в IT две: инвалидация кэша и именование переменных"

Ches
08.12.2016
21:27:27
посоветуйте может какие нибудь адвансед видеокурсы по реакту?

Adel
08.12.2016
21:35:46
а вот либ, которые занимаются именованием переменных нет
*правильным

Дмитрий
08.12.2016
21:36:10

Google

Adel
08.12.2016
21:37:13
я так понимаю, фетчинг данных по требующейся сущности можно завернуть в мидлвару, которая будет собственно выплевывать что-то из кэша, либо перезапрашивать

Dmitry
08.12.2016
21:44:16
А точно ли зафетченные данные вообще нужны в redux? лол
И кэше

Дмитрий
08.12.2016
21:46:11
Я бы поставил вопрос скорее даже так, а сколько вообще должно быть данных, чтобы думать о кэшировании?
Это же невероятно громадный объём какой-то

Dmitry
08.12.2016
21:46:46
Ну вот да
Тут на самом деле два вопроса

Adel
08.12.2016
21:53:08
например
и в локастор его

Evgeny
08.12.2016
22:27:22
Посоветуйте компонент для стики-хидера
https://github.com/captivationsoftware/react-sticky
Мне вот эта штука понравилась, но там пиздос просто по перформансу

Alexander
08.12.2016
22:34:02
я юзал https://github.com/yahoo/react-stickynode, но он не все, что мне надо было, умел
пришлось докостыливать

Evgeny
08.12.2016
22:34:56
Ща гляну
По перформансу задрочились, да
Но нужно дописывать
У react-sticky есть клевая тема с <StickyContainer />
Плюс stickyClassName — какой класс поставить, когда компонент в стики ушёл

jdc
08.12.2016
22:50:06
Подскажите как хедер прикрепить к верхней части экрана
При скроле на телефоне

Andrew
08.12.2016
22:50:33
что-то типа CSS