Как стать автором
Обновить

Комментарии 15

Vue.observable()

Т.е. теперь в Vue можно как в MobX или Knockout? Наконец то!

Angular 2+ еще

А что, разве в Angular завезли реактивность в стиле observable / computed?

Там используется RxJS.

...API которой похоже на API MobX, Knockout или Vue только одним словом observable :-)
круто, спасибо за статью, плюсануть не могу к сожалению, все хорошеет библиотечка, это радует.
Немного странная логика «serverPrefetch()». Код выполняется на сервере, но при этом участок кода с этим хуком всё-равно попадает с билд для браузера.
Да, но в реальных проектах вряд ли кто-то станет прямо писать serverPrefetch() внутри компонента.

В примере кода, который я привел, логика загрузки повторяется два раза, в serverPrefetch() и mounted():
export default {
  /* ... */

  async serverPrefetch() {
    await this.fetchItem();
  },

  mounted() {
    if (!this.item) {
      this.fetchItem();
    }
  },
};

В некоторых компонентах понадобится писать похожую логику и в хуке updated().

Поэтому очевидное решение — своя абстракция над serverPrefetch() и mounted() через миксин или плагин.
Ну, изначально суть идеи была в том, чтоб на сервере обращаться напрямую к модели через ORM, а не выполнять http-запросы для получения данных. По этому подумал что метод, выполняемый только на сервере должен выпилиться при сборке из клиенсткой части.
Хмм, грязная идея, мне нравится.

Тогда можно написать свой babel-плагин, который выпилит все методы serverPrefetch() из экспортированных объектов во vue-файлах.
Это уже костыли получатся, если не задумано разработчиком Vue и не будет поддерживаться в будущем :)

И тут есть ещё один гвоздь, собственно, для чего и затеивался серверный рендеринг — исполнение одних и тех-же компонентов как на клиенте, так и на сервере. Это не будет иметь нужного эффекта, если придётся поддерживать 2 разных интерфейса — для клиента и для сервера. Решением возможно могла бы послужить какая-нибудь универсальная ORM, у которой всё это под капотом, но это уже совсем другая история.
npm i vue@2.6.0-beta.2


Нужно ещё обновить vue-server-renderer и vue-template-compiler до соответствующей версии.
Спасибо, обновил статью

С такими темпами добавления нового синтаксиса в шаблонах скоро не останется валидных способов определения HTML атрибутов

Все больше становится похож на angular
Зарегистрируйтесь на Хабре, чтобы оставить комментарий