Nuxt&SSRでsetIntervalを使う時の注意点
上記にあるように beforeCreate
と created
でsetInerval
を使うと、SSR中に呼び出されるので、サーバでsetIntervalが実行されて、clearIntervalをしない限り永遠に続いて行く...
気づかず実装してしまって、焦ったのでメモ。
怖いので、mixins 使ってwrapperしてみた。 考えたこととしては、 - created でなく、mounted を使う - process.server 時に行わないようにする。(mountedの時点で呼ばれないはずだからいらないかも?) - beforeDestory の時あたりで、clearIntervalを行う - 本当は必要ないが、未来の自分が信用できないので、念のため時間設定でclearIntervalを設定しておく。
以下プログラム
export default { data() { return { intervalID: null }; }, methods: { setTimer: function(callback, intervalTime) { if (process.server) return; this.intervalID = setInterval(() => { callback(); }, intervalTime); // 万が一の不具合を防ぐために、ClearIntervalを実施する。(とりあえず30分) setTimeout(() => { clearInterval(this.intervalID); }, 30 * 60 * 1000); } }, beforeDestroy() { clearInterval(this.intervalID); } };
<script> import timer from '~/mixins/utils/timer.js' export default { mixins: [timer], mounted: { this.setTimer(this.function, intervalTime); } } </script>