在使用Nuxt进行SSR期间未调用Vue实例`watcher'

时间:2018-11-02 11:59:33

标签: javascript vuejs2 nuxt.js

我有一个带有以下代码的插件:

   let vm = new Vue({
      data: {
        foo: 1,
      },
      watch: {
        $data: {
          deep: true,
          handler(){
            console.log('changed')
          }
        }
      }
    })

    vm.foo = 123; // should trigger watcher

问题是消息'changed'仅在客户端打印,这意味着在SSR期间未将观察者称为服务器端吗?对这种行为有任何解释吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个纯Vue SSR的小型实现:https://codesandbox.io/s/oqx461ll8z

结果与预期的有些不同。 SSR流程完成后,观察者将使用最新值进行拖动。由于服务器上没有反应性,Vue出于一致性和性能方面的原因(source)必须预取数据,所以会发生这种情况。

结果:

<div data-server-rendered="true">123</div>
{ foo: [Getter/Setter] } 123 123
changed