본문 바로가기
Vue.js

$nextTick()

by 하이란 2022. 8. 8.

$nextTick() 이란?

  •  Javascript는 비동기로 처리되는 특성을 가지고 있습니다. 
  • 데이터가 업데이트 되고 나서 ui가 갱신될 때 뷰가 dom을 제대로 찾지 못하는 경우가 있습니다
  • 이러한 문제점을 해결해주는 것이 callback 함수인 $nextTick() 입니다. 

사용예시

HTML

<div>
    <div ref="listScroll" class="scrolledList">
      <ul ref="scrolledHeight">
        <li :key="month" v-for="month in months">
          {{ month }}
        </li>
      </ul>
    </div>

    <input type="text" placeholder="Add Month" v-model="month" />
    <button @click="addMessage" @keyup.enter="addMessage">Add Month</button>
  </div>

SCIRPT

<script>
export default {
  data() {
    return {
      month: "",
      months: ["Jan", "Feb", "Apr", "May", "June", "July", "Aug"],
    };
  },
  mounted() {
    this.updateScrollNextTick();
  },
  created() {},
  destroy() {},
  methods: {
    addMessage() {
      if (this.month == "") {
        return;
      }

      this.months.push(this.month);
      this.month = "";
      this.updateScrollNextTick();
    },
    updateScrollNextTick() {
      let scrolledHeight = this.$refs.scrolledHeight.clientHeight;

      this.$nextTick(() => {
        this.$refs.listScroll.scrollTo({
          behavior: "smooth",
          top: scrolledHeight,
        });
      });
    },
  },
};
</script>

화면

** nextTick()가 없으면 add month 누르고 데이터가 추가되면 추가 되고 스크롤이 제일 아래로 내려가야되는데, 그 이전 데이터까지 스크롤이 내려가고 그 다음 데이터가 추가 된다. 

따라서 데이터가 추가되고 스크롤이벤트가 발생되게 하기 위해서 nextTick()를 사용해야 한다. 

 

참고

https://blog.logrocket.com/understanding-nexttick-in-vue-js/

'Vue.js' 카테고리의 다른 글

vue에서 addClass, removeClass 처럼 사용  (0) 2022.08.08
1:1 error The template root requires exactly one element  (0) 2022.08.08
실시간 resize 확인 코드  (0) 2022.08.08
코드 스플리팅  (0) 2022.08.08
vue chart.js  (0) 2022.08.08