
Dreamerinnoise
11.02.2017
15:16:49
архитектурь как хочешь

Ilya
11.02.2017
15:18:24
Согласен. Я тут попробовал сделать драг и друп дерево на редаксе и поседел на профалинге
Вышло reselect на reselect и redux reduce-reducers - ад адский. Надо каждой ноде легко брать уровень, предыдущее, следующее, следующего родителя. Mobx решает, но, нормализация нужна тоже
@computed get childs если делать по записям ужасные тормоза будут из-за того что глубина сравнения большая.

Google

Ilya
11.02.2017
15:22:37
@computed get childIds и только иды решило
А потом выбираем по getById
У кого были такие похожие задачи?

Mike
11.02.2017
15:23:17
Refs не?

Dreamerinnoise
11.02.2017
15:23:21

Ilya
11.02.2017
15:24:22
Щас представлю код, секунду
Тут выходит, у меня есть dragNode и hoverNode и мне надо брать при перетаскивании следующего родителя через refs?

Dreamerinnoise
11.02.2017
15:30:12
ref Это модификатор для твоего Observable
observable.ref: Disables automatic observable conversion, just creates an observable reference instead.
Или @zuldare про другое?

Mike
11.02.2017
15:31:38
Я про рефы, чтоб айдишниками не пользоваться
https://facebook.github.io/react/docs/refs-and-the-dom.html

Ilya
11.02.2017
15:32:16
<Node ref="child12" ?

Google

Ilya
11.02.2017
15:32:24
Я так понял

Mike
11.02.2017
15:33:05
Да

Ilya
11.02.2017
15:34:01
Конечно такой pure режим)
Возможный факт, но смесь логики и отображения может получиться

Dreamerinnoise
11.02.2017
15:35:38

Ilya
11.02.2017
15:37:25
@computed.struct childIds который высчитывает фильтром детей как-то оказался самым оптимальным, без головной боли и чистым по коду
И по скорости лучше
Был вариант при добавлении или правке менять просто массив у детей и не делать computed, пока его не проверил
Тут надо сеттер на parentId навесить

Dreamerinnoise
11.02.2017
15:40:46

Ilya
11.02.2017
15:42:13
Чтобы по содержимому сверял, тк filter всегда возвращает новый массив и его не проверить как =
это затратно конечно

Adel
11.02.2017
15:58:54
А что собственно мешает нормализоваться с мобиксом?
Извините, что вмешиваюсь

Oleg
11.02.2017
16:11:46
Кто практикует нормализацию данных? Какую практику вытеснения данных из нормализованного хеша используете?

Vasiliy
11.02.2017
16:18:55
хороший вопрос, присоединяюсь,
я не использую никакую, удаляю из ids, оставляю в entities

Adel
11.02.2017
16:46:42
Дольше, чем она нужна
Клади все в локалстордж
Оттуда бери мидлварой

Google

Adel
11.02.2017
16:48:09
Справочную тоже клади в локалстордж, бери ее при ините приложения
Кэшируем айдишники щас по ключу «нормализованная строка запроса»
С таймаутом
Несправочную с не очень большим таймаутом, справочную с большим. Плюс у нас по вебсокету приходят обновления
Дальше поле для маневра
Обсерайте, жду)

Алексей
11.02.2017
17:42:28
Добрый вечер, господа. Такой вопрос. Существует ли в природе роутер, удовлетворяющий таким вот требованиям:
1) history api, hash и серверный роутинг,
1) не зависит от view (react-router отпадает),
2) поддерживает базовый URL, то есть например способен обрабатывать url http://example.com/myapp/users/user как /users/user,
3) поддерживает переход через вызов определённой функции типа router.go('/users/user')
?
собственно react-router похоже удовлетворяет всем пунктам, кроме первого

Andrey
11.02.2017
17:45:29
http://router5.github.io

Алексей
11.02.2017
17:48:14

Yumi
11.02.2017
19:04:23

Arseniy
11.02.2017
19:05:08
то что он не зависит от того какой ты фреймворк используешь, я бы так определил

Andrey
11.02.2017
19:05:54
да, там нет специфичных моментов для определенного фреймворка

Никита
11.02.2017
19:22:59
Всем привет! Подскажите как решить проблему. Есть лоадер
{
test: /\.p?css$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader?modules!postcss-loader',
}),
},
И теперь хочу использовать react-table. В нём есть свой css файл. Как его оставить в стандартном виде, а не прогонять через модули? Спасибо!

Vasiliy
11.02.2017
19:26:51
include/exclude

Никита
11.02.2017
19:27:45
эту css'ку я подгружаю через import 'react-table/react-table.css'

Vasiliy
11.02.2017
19:27:57
да, include/exclude
{
test: /\.css$/,
loader: getCSSLoader('app'),
exclude: /node_modules/,
include: [
paths.styles,
paths.scripts,
],
},
{
test: /\.css$/,
loader: getCSSLoader('vendor'),
include: /node_modules/,
},

Andrew
11.02.2017
19:28:48
можешь прописать include и папку со своими сорцами
либо exclude для исключения папок

Oleg
11.02.2017
19:29:04

Google

Никита
11.02.2017
19:29:13
понял! Спасибо большое!

Vasiliy
11.02.2017
19:30:27

Admin
ERROR: S client not available

Oleg
11.02.2017
19:32:52
с сервера сразу гоню entities: {[collection]: {[id]: any}} и обновляю нормализованный стор. Там два вопроса 1) грамотный мердж partial 2) GC по записям в нормализованных коллекциях. refcount какой-нибудь придется выдумывать

Vasiliy
11.02.2017
19:33:51
их столько существует этих политик замещения кэша,
но никто не заморачивается почему-то особо,
либо я не могу ничего найти, либо не делятся, либо не парятся
https://en.wikipedia.org/wiki/Cache_replacement_policies
https://github.com/paularmstrong/normalizr/issues/47
https://github.com/gaearon/flux-react-router-example/issues/30
https://github.com/gaearon/flux-react-router-example/issues/18
поделись плиз, если реализуешь)
(у меня просто нет таких требований и я даже не заморачиваюсь (но задавался этим вопросом тоже, на всякий случай))

Ywein
11.02.2017
19:44:05
хм, я как то обычно привык пинать людей делающих апи чтобы они уже в нормализованном виде отправляли данные, это плохо?
или я вообще не понял о чем вы

Vasiliy
11.02.2017
19:45:50
это клево, это просто не всегда возможно)

Oleg
11.02.2017
19:46:36
а partial update как делаешь?

Ywein
11.02.2017
19:46:43
точнее про кэш и gc я точно не понял о чем вы.
в каком это месте вообще нужно и зачем?
я как то не задумывался о gc в реакте.

Vasiliy
11.02.2017
19:49:33
это не про реакт, но вот почитай, что в тех ишьюс чуваки спрашивают
они беспокоятся о памяти, тк в normalizr не предусмотрено "удаление" чего-либо из "нормализованного хранилища" (ну, normalizr это просто пример)
и им отвечают, чтобы они не парились

Ywein
11.02.2017
19:52:48
а partial update как делаешь?
ну в духе такого
return {...state,
data: [
...state.data.slice(0, index),
Object.assign({}, state.data[index], action.alert),
...state.data.slice(index + 1)
]
}
(надеюсь я правильно понял о чем мы)

Oleg
11.02.2017
19:55:28
я про то что вот ты вычитываешь список. там модель обкоцанная, потому что не надо полную подель в списке. Потом переходишь на запись, там вычитывается полная модель. Возвращаешься назад на список - возникает вопрос с partial update, потому что если без него то твоя полная модель, вычитанная раньше затрется

Vasiliy
11.02.2017
19:57:03
в real-world примере в redux репке даже затронут этот кейс (но наивно, просто именно как пример)

Oleg
11.02.2017
19:58:09
ну я про разные практики спрашиваю. кто как делает

Ywein
11.02.2017
20:00:03
Ну так Object.assign именно это и делает же.
пример.
a = { 1: 'ccc', 2: 'aaa' }
b = { 1: 'ddd', 2: 'ggg', 3: '222' }
c = Object.assign({}, a, b)
Object {1: "ddd", 2: "ggg", 3: "222"}
f = Object.assign({}, c, {1: '111'});
Object {1: "111", 2: "ggg", 3: "222"}

Vasiliy
11.02.2017
20:02:11
скоро relay2 выйдет)
https://zeemee.engineering/relay-2-simpler-faster-more-predictable-128769e72318#.4xsj54582

Andrey
11.02.2017
20:03:10
я еще в прошлом году слышал про это, но в репозитории тихо было
Aug 18, 2016

Google

Ywein
11.02.2017
20:04:42
что-то я как то relay не очень оценил. работать с их graphql не хочется, возможно я просто не понял в чем фишка, но для не-супер-больших сервисов аля фейсбук он выглядит весьма неудобным по сравнению с классическим rest.
не говоря уж о том, что я в половине проектов сокеты использую.

Oleg
11.02.2017
20:07:18
все не так просто. Ты вычитал список а там уже все изменилось. Начинаешь мерджить с тем что у тебя сейчас есть и получаешь неконсистентные данные. Я думаю что можно решить двухходовкой - вначале вычитываешь по query идентификаторы выборки, затем по идентификаторам добавляешь состояние кеша и с сервера получаешь гибридную структуру где могут быть и обкоцанные модели и полные. Но такая схема - это два запроса на каждую коллекцию. Не гуд

Vasiliy
11.02.2017
20:09:27
да, мне тоже не зашел он, сложна (я про relay & graphql) + сервер свой

Oleg
11.02.2017
20:09:37
так orm работают

Ywein
11.02.2017
20:10:42

Oleg
11.02.2017
20:13:41
ты же не один. кто-то эту запись отредактировал. ты пошел на список и тебе пришли краткие модельки. ты смерджил и все, прихали. полные модели разошлись

Ywein
11.02.2017
20:20:50
но ты же данные из полных моделей в списке все равно не отображаешь
поэтому какая разница?

Oleg
11.02.2017
20:30:23
если закешированные данные не используются в каких-нибудь подковерных манипуляциях и если при переходе например на форму отдельной записи ты всегда фетчишь - может и нет

Ywein
11.02.2017
20:32:15
В последних проектах я эту проблему вообще решаю с помощью сокетов.
данные пушатся к юзеру когда они обновляются

Владимир
11.02.2017
20:32:45
Весь блок данных пушишь?