clojure-russia

Работа и релокейт: #jobs-rus | #clojure-russia-offtop Телеграм-чат https://t.me/clojure_ru
Ivan Fedorov 2019-08-04T12:37:33.000800Z

Господа, пользователи ре-фрейма – сталкивались ли вы с вопросом управления ключами вьюх? Я изначально кормил реагенту айди сущностей как ключ вьюхи. Но когда новая сущность под вьюхой сохраняется и обретает серверный айди, её ключ меняется. В итоге я занимаюсь не самыми красивыми вещами с управлением ключами. Подозреваю что можно как-то лучше жить

akond 2019-08-04T14:05:44.001600Z

и как ты это делаешь сейчас?

andrewboltachev 2019-08-04T16:50:36.003800Z

@ognivo а какая проблема (после сохранения сущности) использовать с ней новый ключ (серверный)? т.е. старая сущность исчезнет, новая появится (если проблема и есть, она наверно связана с, например, uncontrolled components, как здесь? https://www.robinwieruch.de/react-list-key/ )

Ivan Fedorov 2019-08-04T21:37:53.004800Z

@andrewboltachev неприятность – в потере фокуса

andrewboltachev 2019-08-04T21:38:26.005600Z

@ognivo ага... да, это важно

Ivan Fedorov 2019-08-04T21:39:32.006600Z

если в сущности есть редактируемый компонент, а в UX сохранение на автомате, а не нажетиях сейва

andrewboltachev 2019-08-04T21:40:11.007Z

а вообще, есть клиентские id?

andrewboltachev 2019-08-04T21:40:20.007700Z

в каком-либо явном виде?

andrewboltachev 2019-08-04T21:47:27.009100Z

@ognivo получается, что если при смене ключа фокус в любом случае потеряется, то ключ должен оставаться также в любом случае неизменным (конечно, понятно, что это актуально только во время того, как идёт редактирование данной конкретной сущности)

andrewboltachev 2019-08-04T21:50:52.010700Z

ну и значит, на время данной сессии нужно поддерживать (хранить в app-db?) hashmap неких "key-overrides" наверно, где "серверным" ключам будут ставиться в соответствие изначальные клиентские

andrewboltachev 2019-08-04T21:52:46.012400Z

(for [element elements]
^{:key (get @(re-frame/subscribe [:react-key-overrides] (:id element) (:id element))}
[:div ...])

andrewboltachev 2019-08-04T21:55:24.014200Z

ну и наполняться этот :react-key-overrides (т.е. что за ним стоит по событию :on-success при сохранении (хотя там не обязательно например cljs-ajax, может быть и сокет и т д). т.е. "в нагрузку" с бэкенда должен ещё придти старый ключ либо как-то так А ваше решение отличается?