Size: a a a

Советский Angular

2020 November 03

SS

Sergei Sergeevich in Советский Angular
Anton Shvets
похудел
решил загуглить..
источник

МА

Михаил Аксенов... in Советский Angular
Всем привет.

А есть у кого-нибудь понимание, как правильно синхронизировать состояние приложения с адресной строкой браузера? Какие-нибудь best practices?

Я пока пришёл к двум вариантам:

1. При каждом изменении состояния приложения - пишем его в url. В нужном месте слушаем изменения параметров url и реагируем на их изменения.
+ url - единственный источник информации; не надо как-то дополнительно обрабатывать переход назад в истории браузера
- завязываемся на url; на каждое изменение состояния надо сериализовать данные в url, а потом прочитать оттуда; можно попасть в цикл, когда обновление url будет запускать изменение состояния, которое будет обновлять url и т.д.

2. Читаем данные из url один раз - при загрузке страницы и сохраняем в некий сервис. В дальнейшем все изменения пишутся также в этот сервис и он же на каждое изменение сериализует данные в url, чтобы они оставались там актуальными.
+ удобно работать с несколькими источниками изменений с помощью rxjs; не нужно постоянно парсить данные из url параметров
- надо как-то отдельно работать с историей браузера (переход назад, например);
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Михаил Аксенов
Всем привет.

А есть у кого-нибудь понимание, как правильно синхронизировать состояние приложения с адресной строкой браузера? Какие-нибудь best practices?

Я пока пришёл к двум вариантам:

1. При каждом изменении состояния приложения - пишем его в url. В нужном месте слушаем изменения параметров url и реагируем на их изменения.
+ url - единственный источник информации; не надо как-то дополнительно обрабатывать переход назад в истории браузера
- завязываемся на url; на каждое изменение состояния надо сериализовать данные в url, а потом прочитать оттуда; можно попасть в цикл, когда обновление url будет запускать изменение состояния, которое будет обновлять url и т.д.

2. Читаем данные из url один раз - при загрузке страницы и сохраняем в некий сервис. В дальнейшем все изменения пишутся также в этот сервис и он же на каждое изменение сериализует данные в url, чтобы они оставались там актуальными.
+ удобно работать с несколькими источниками изменений с помощью rxjs; не нужно постоянно парсить данные из url параметров
- надо как-то отдельно работать с историей браузера (переход назад, например);
1
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
по факту, будет просто происходить синхронизация стейта с url
источник

AS

Anton Shvets in Советский Angular
Михаил Аксенов
Всем привет.

А есть у кого-нибудь понимание, как правильно синхронизировать состояние приложения с адресной строкой браузера? Какие-нибудь best practices?

Я пока пришёл к двум вариантам:

1. При каждом изменении состояния приложения - пишем его в url. В нужном месте слушаем изменения параметров url и реагируем на их изменения.
+ url - единственный источник информации; не надо как-то дополнительно обрабатывать переход назад в истории браузера
- завязываемся на url; на каждое изменение состояния надо сериализовать данные в url, а потом прочитать оттуда; можно попасть в цикл, когда обновление url будет запускать изменение состояния, которое будет обновлять url и т.д.

2. Читаем данные из url один раз - при загрузке страницы и сохраняем в некий сервис. В дальнейшем все изменения пишутся также в этот сервис и он же на каждое изменение сериализует данные в url, чтобы они оставались там актуальными.
+ удобно работать с несколькими источниками изменений с помощью rxjs; не нужно постоянно парсить данные из url параметров
- надо как-то отдельно работать с историей браузера (переход назад, например);
подписываешься на юрл, парсишь, сохраняешь данные в стейт.
подписываешься на стейт, в случае расхождений с юрл меняешь юрл.
работаешь со стейтом, зачем везде парсить то
источник

МА

Михаил Аксенов... in Советский Angular
Вертихвост キバ 🏡🦊
по факту, будет просто происходить синхронизация стейта с url
А как же лишний парсинг на каждое изменение?
источник

МА

Михаил Аксенов... in Советский Angular
Anton Shvets
подписываешься на юрл, парсишь, сохраняешь данные в стейт.
подписываешься на стейт, в случае расхождений с юрл меняешь юрл.
работаешь со стейтом, зачем везде парсить то
Мне этот подход тоже больше нравится. А нюансы с переходом назад в браузере можно обойти отдельно
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Михаил Аксенов
А как же лишний парсинг на каждое изменение?
просто подписываешься на изменения и пишешь их в стейт)
источник

МА

Михаил Аксенов... in Советский Angular
Но вопрос больше про то, есть ли какие-то общепринятые методы для этого? Или каждый делает как ему удобно?
источник

МА

Михаил Аксенов... in Советский Angular
Вертихвост キバ 🏡🦊
просто подписываешься на изменения и пишешь их в стейт)
Не очень круто получается, если в url хранятся id неких сущностей, а в стейте нужны сами эти сущности. Каждый раз надо будет искать нужную по её id, чтобы наполнить стейт
источник

AS

Anton Shvets in Советский Angular
Михаил Аксенов
Но вопрос больше про то, есть ли какие-то общепринятые методы для этого? Или каждый делает как ему удобно?
да можно просто route.queryParams.pipe(share())
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Михаил Аксенов
Не очень круто получается, если в url хранятся id неких сущностей, а в стейте нужны сами эти сущности. Каждый раз надо будет искать нужную по её id, чтобы наполнить стейт
В url должно быть достаточное количество информации, чтобы можно было получить аналогичное отображение открыв страницу в новой вкладке

Если для этого достаточно только id, то писать надо только id
источник

SS

Sergei Sergeevich in Советский Angular
вот спорю с сотрудником - его позиция такова что все данные от сервера подлежат обязательной сериализации на клиенте (при получении) и десериализации ( при отправлении). выглядит это стремно, приходится описывать не только интерфейсы, но мапперы и к тому-же десериаизацию в сервисах. я же выступаю в пользу того что бы не трогать лишний раз эти данные, ограничиваясь описанием интерфейсов и может быть простенькими мапперами (что бы обрезать лишнее). Сталкивались вы с подобным?
источник

ДМ

Денис Макаров... in Советский Angular
Sergei Sergeevich
вот спорю с сотрудником - его позиция такова что все данные от сервера подлежат обязательной сериализации на клиенте (при получении) и десериализации ( при отправлении). выглядит это стремно, приходится описывать не только интерфейсы, но мапперы и к тому-же десериаизацию в сервисах. я же выступаю в пользу того что бы не трогать лишний раз эти данные, ограничиваясь описанием интерфейсов и может быть простенькими мапперами (что бы обрезать лишнее). Сталкивались вы с подобным?
а еще классы место в бандле занимают, а интерфейсы нет
источник

SS

Sergei Sergeevich in Советский Angular
Денис Макаров
а еще классы место в бандле занимают, а интерфейсы нет
Вот с этим как раз никто не спорит
источник

ДМ

Денис Макаров... in Советский Angular
Sergei Sergeevich
Вот с этим как раз никто не спорит
тогда о чем спор?)
источник

VS

Vladimir Stempel 👁🍵... in Советский Angular
Sergei Sergeevich
вот спорю с сотрудником - его позиция такова что все данные от сервера подлежат обязательной сериализации на клиенте (при получении) и десериализации ( при отправлении). выглядит это стремно, приходится описывать не только интерфейсы, но мапперы и к тому-же десериаизацию в сервисах. я же выступаю в пользу того что бы не трогать лишний раз эти данные, ограничиваясь описанием интерфейсов и может быть простенькими мапперами (что бы обрезать лишнее). Сталкивались вы с подобным?
ну по хорошему маппинг должен быть на сервере
источник

SS

Sergei Sergeevich in Советский Angular
О том нужно данные перегонять из одной формы в другую или нет, при том что никакой логики в этой трансформации нет.
источник

ДМ

Денис Макаров... in Советский Angular
ааа
источник

SS

Sergei Sergeevich in Советский Angular
Vladimir Stempel 👁🍵
ну по хорошему маппинг должен быть на сервере
Это по хорошеву, а в реале с сервера приходят нереальные обьемы данных
источник