
Alex
02.11.2017
22:38:23
Так же флаг удаления

kana
02.11.2017
22:39:01
ну че поделать

Alex
02.11.2017
22:39:14
Я предложил вариант

Google

kana
02.11.2017
22:39:36
флаг удаления для чего?

Dmitry
02.11.2017
22:39:43
Я бы в этом случае просто кастомную вариацию для редюсера писал

kana
02.11.2017
22:39:46
вот мы изменили статус тудушки, куда там флаг?

Dmitry
02.11.2017
22:39:48
под каждый кейс

Alex
02.11.2017
22:40:03
Для того чтобы элемент не рендерился, вместо удаления или подмены стейта
Оптимизация

kana
02.11.2017
22:40:19
короче, есть вариант

Dmitry
02.11.2017
22:40:27

kana
02.11.2017
22:40:29
это база данных как в Datomic

Dmitry
02.11.2017
22:40:34
вот мой костыль)

kana
02.11.2017
22:40:37
когда мы храним массив патчей
я такую юзал на фронте (DataScript)
ролбек очень простой - тупо удаление одного патча

Google

Dmitry
02.11.2017
22:41:09

kana
02.11.2017
22:41:19
постепенно батчим их

Dmitry
02.11.2017
22:41:24
оверхед из-за патчей
Можно жсон пачем хранить все изменения стейта)

Alex
02.11.2017
22:42:05
Допустим есть сообщение, оно завернуто в { state:{}, asyncState:{
status:string,
State:{}<}

Dmitry
02.11.2017
22:42:37
хочется обобщенное решение

Alex
02.11.2017
22:43:10
Это и есть обобщннное решение
Не нужно знать структуру стейта

kana
02.11.2017
22:43:20
так это и есть твое решение

Alex
02.11.2017
22:43:28
Каждого элемента

kana
02.11.2017
22:43:34
у него state - current, asyncState - history

Alex
02.11.2017
22:43:41
Достаточно знать структуру контейнера

Dmitry
02.11.2017
22:44:03

kana
02.11.2017
22:44:10
ну да

Alex
02.11.2017
22:44:19
Как я понял там был весь стейт

kana
02.11.2017
22:44:38
я короч подумаю над списком патчей
это единственный норм вариант имхо

Dmitry
02.11.2017
22:44:56
ну да
а если сделать все редюсеры очень атомарными
с базовыми операциями

Google

Dmitry
02.11.2017
22:45:06
и для кадой операции реверт написать

Alex
02.11.2017
22:45:18
Если нужен полный контроль над изменениями, не оверхед?

Dmitry
02.11.2017
22:45:52

Alex
02.11.2017
22:45:55
Вы там не гидхаб на режаксе решили написать надеюсь? ??

Dmitry
02.11.2017
22:46:00
https://github.com/mobxjs/mobx-state-tree

kana
02.11.2017
22:46:04
короч, у меня в голове дичайшная идея
пожоще тардиса
оверхед лютый
но рабочая вроде
буду ее думать

Dmitry
02.11.2017
22:46:49

kana
02.11.2017
22:47:18
ну да, это про монаду Tardis, которая позволяет нам работать с данными, которые мы получим в результате выполнения текущей операции

Dmitry
02.11.2017
22:47:27

Alex
02.11.2017
22:47:28

Dmitry
02.11.2017
22:47:31
хех

kana
02.11.2017
22:47:32
то есть брать данные из будущего и из прошлого
делал простой аналог такого на жс уже
типа замена каждого элемента массива на максимальный элемент этого массива за один проход
мы пробегаемся по массиву и заменяем каждый элемент на максимальный, попутно находя максимальный (то есть заменяем на элемент, которого еще не существует)
магия ленивых вычислений

Google

Dmitry
02.11.2017
22:49:29
т.е массив из геттеров ?)

kana
02.11.2017
22:50:31
по сути да. В жс все равно выйдет два прохода, один для поиска максимального, другой для выполнения лямбды в каждом элементе (при первой замене максимальное как раз и найдется и закэшируется, дальше каждый элемент на него и заменится)
в каком хачкеле, где все лениво, намного проще

Dmitry
02.11.2017
22:51:15
У меня еще идея, если дифать стейт редюсера после каждого екшона
и заменять это на список json патчей
и потом когда захотим зареверить какое-то изменение, то надо лишь зареверить этот список

kana
02.11.2017
22:51:54
тут в чем проблема

Dmitry
02.11.2017
22:52:02
долго

kana
02.11.2017
22:52:13
после замены мы можем сделать экшон, который использует временные данные
и его потом нужно будет повторить, когда мы получим реальные данные
то есть это такой стэк из оптимистиков
*очередь

Alex
02.11.2017
22:52:58
Блочить такие изменения

kana
02.11.2017
22:53:23
тогда оптимистик не сильно лучше обычных запросов будет

Dmitry
02.11.2017
22:53:25
Велосипед выходит в любом случае
чет

kana
02.11.2017
22:53:39

Dmitry
02.11.2017
22:53:42
Проще договориться с пмом что бы без этих оптимистиков
хддд

Alex
02.11.2017
22:54:15
Ну оптимистик как правило нужен там где важна низкая задержка и маловероятно повторное взаимодействие с этим же элементом

Google

Alex
02.11.2017
22:54:29
Область применения все же нужно учитывать

kana
02.11.2017
22:55:03
ну возьмем тот же чат
крайне нежелательно, чтобы юзер не мог отправлять сообщения, пока не отправится предыдущее

Alex
02.11.2017
22:55:51
Так это независимые элементы
Максимальная ошибка тут - неверный порядок

kana
02.11.2017
22:56:28
ну тут хз, из-за того, что ебаный вк отправляет второе сообщение, не отправляя первое, часто случаются лулзы
которые мне бы были крайне нежелательны

Alex
02.11.2017
22:56:43
Вк говно
Мб не будем о плохом

Dmitry
02.11.2017
22:57:07
ну тут выходит надо сохранять ордер, как это в телеграме

Alex
02.11.2017
22:57:12
Тут проблема уже в том что они хуево сделали
Это называется мы типа сделали, но работает 50 на 50
Как бы оптимистик но не факт что дошло
Много разных фич можно придумать, ту же серию, допустим отправленное сообщение ещё не подтвердил сервер, но пользователь отправил второе, ставим второе в очередь, но отображаем пользователю, готово, проблема вк решена
Теперь можно словить задержку серии сообщений, но они Хотя-бы будут соответствовать клиенту

Dmitry
02.11.2017
23:01:33
Походу с оптимистик апдейтами единственно работающего решения нету
все это специфические кейсы

Alex
02.11.2017
23:02:21
Ну сервер в любой момент может по какой-то причине абортнуть запрос, осталось просто рассмотреть все варианты возможных событий
Я бы даже сказал что их N кол., а значит вполне решаемо

Dmitry
02.11.2017
23:05:53