【问题标题】:Why is this lifecycle hook code working twice?为什么这个生命周期钩子代码会工作两次?
【发布时间】:2020-05-28 15:50:32
【问题描述】:

有这样一段代码:

<template>

   <div class="wrapper">
   </div>

</template>

<script>

import axios from 'axios';

export default{

  created () {
    console.log('222');
    this.getTrackerIdData();
    this.getTrackerData();
  },

  methods: {

    getTrackerIdData () {
        return axios.get("https://seo-gmbh.eu/couriertracker/json/couriertracker_api.php?action=tracking_new.create" , {
         })
        .then(response => {
          this.$store.commit('tracker/setTrackingKeyId', response.data.data.tracking_new_key_id);
          this.$store.commit('tracker/setQrCodeUrl', response.data.data.filename_qr_code_tracking_new);
        })
        .catch(function (error) {
          console.log(error);
        });
    },

    getTrackerData () {

        setInterval(()=>myTimer(this), 60000);

        function myTimer(th) {
             return axios.get("https://seo-gmbh.eu/couriertracker/json/couriertracker_api.php?action=get_tracking_data&key_id=" + th.$store.state.tracker.trackingKeyId , {
             })
            .then(response => {
              th.$store.commit('tracker/setTrackingServerData', response.data.data.tracking_data);
            })
            .catch(function (error) {
              console.log(error);
            });
        }

},

  }
}
</script>


在项目中启动这样的解决方案时,服务器端开发人员告诉我,至少其端的请求方法getTrackerIdData () 可以工作两次!
将代码 (console.log ('222');) 放在 created 生命周期(方法调用的地方)的钩子中后,我发现它在 firebug 中显示了两次:


问:
为什么会发生这种情况?从实现从服务器接收数据的角度来看,在这种情况下哪种方法是正确的?

附:如果在 mounted 钩子中调用了所有内容,那么代码可以工作,包括在服务器端,只有 1 次。

【问题讨论】:

  • 看起来一个来自 SSR,另一个来自客户端渲染。在 SSR 期间不会调用 mounted 挂钩。
  • 我有另一个项目,根本没有任何中间件,也有同样的问题。

标签: javascript vue.js nuxt.js


【解决方案1】:

重要的是要知道,在任何 Vue 实例生命周期中,只有 beforeCreate 和 created 钩子在客户端和服务器端都被调用。所有其他钩子仅从客户端调用。

这就是为什么创建的钩子调用了 2 次并执行 console.log ('222'); 两次

参考你可以阅读here

【讨论】:

  • 我不太明白 - 在这种情况下需要代码调用两次? (从实际实际任务的角度来看。)为什么需要它?它是什么情况?
  • 对于 spa 模式,只有客户端站点处于活动状态,在这种情况下,beforeCreate 和 created 挂钩仅调用一次。但是对于通用模式,在这种情况下有服务器和客户端部分 beforeCreate 和 created 钩子被调用 2 次​​span>
  • 但是有一个选项只能调用一次,你也想要吗?
  • 我只是好奇——为什么它需要调用一些代码两次?如果这可能存在(调用此代码一次) - 当然很有趣 - 它是如何工作的?
猜你喜欢
  • 2017-03-07
  • 2020-01-24
  • 2020-11-19
  • 2021-03-14
  • 2020-01-15
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多