/relay-test

Primary LanguageJavaScript

Как запустить

  • Клонировать репозиторий
  • Выполнить команду yarn install
  • Выполнить команду yarn relay
  • Выполнить команду yarn start
  • Если запросы к dadata будут падать с 403 ошибкой - в src/config подставить свой токен

Что осталось сделать

Не обновляется AddressesField на refetch

При изменении поля адреса в AddressesField происходит успешный запрос к мокам и данные сохраняются в Store. При этом, AddressesField не перерендеривается, не успел понять почему

Не реализованы мутаций

Добавил мутацию addAddressToUser в models, но не успел добавить в React-компонени и протестировать

Ошибка в RelayObservable при быстром изменении значения инпута AddressesField
Uncaught ReferenceError: r is not defined
   at Object.unsubscribe (<anonymous>:1:2238)
   at Object.unsubscribe (RelayObservable.js:217)

В AddressesField пришлось использовать debounce: при быстром наборе текста в input падает ошибка в RelayObservable.

С точки зрения нагрузки на сервер возможно это и плюс - но пока не понял источник ошибки не могу гарантировать, что она не будет возникать при каких-то кейсах

Остались вопросы к архитектуре

В корневом элементе я указываю один большой фрагментированный query, и потом при получении ответа все props прокидываю каскадом вниз. В случае большого приложения, вижу 2 проблемы:

  • Аргументов и фрагментов может быть очень много. Например, работать с query с 30 аргументами может быть не очень удобно. Например, тот же аргумент addresses нужен только для AddressesField, и, возможно, лучше, что бы только AddressesField о нем и знал
  • Каскад пропсов с ростом приложения может превратиться в ад, потому что запомнить и понять какие нужны на каком уровне компонентов будет уже сложно. В redux это мультиконнектом легко решается - запрашиваются только те пропсы, которые нужны в текущем компоненте, не заботясь о дочерних элементах (они сами все получат, кроме common-компонентов)