vue-$nextTick - 렌더링된 페이지의 콜백을 기다립니다.

vue-$nextTick
  • vue-cli에서 $nextTick의 역할
  • 사례 - 태그 컨텐트 전환
  • 첫 번째 해결 방법 - 타이머 사용
  • 두 번째 방법(중요)---$nextTick
  • vue-cli에서 $nextTick의 역할
  • 작용:
  • 장면: dom , , , , ,
  • 사례 – 태그 컨텐트 전환
  • 탭의 내용을 전환해야 할 때 렌더링이 완료되지 않았기 때문에 값을 직접 호출할 때 최초로 변경되지 않은 데이터로 복사될 수 있음
  •   <div class="home">
        <img alt="Vue logo" src="../assets/logo.png">
    	<h1 ref="msg">msg1:{{msg1}}h1>
    	<h2>msg2:{{msg2}}h2>
    	<h3>msg3:{{msg3}}h3>
    	<button @click="changeMsg()">  button>
      div>
    
    name: 'Home',
    	data() {return {
    		msg1 : "  ",
    		msg2 : '',
    		msg3 : ''
    	}},
    methods : {
    	changeMsg() {
    		//    
    		//    msg1  ,     ,    ,       ,
    		//                       
    		this.msg1 = "      ";
    			this.msg2 = this.$refs.msg.innerHTML;
    			this.msg3 = this.$refs.msg.innerHTML;
    

    첫 번째 해결 방법 – 타이머 사용
  • msg1의 값을 변경하여 업데이트를 촉발하고 렌더링을 시작합니다. 반드시 렌더링이 끝난 것은 아닙니다
  • 따라서 아래에서 가져올 때 업데이트된 데이터를 얻는 데 지연될 수 있음
  • 물론 우리는 타이머나 타이머를 사용하여 0밀리초를 설정할 수 있지만 데이터가 많아질 때
  • 우호적이지 않아
  • <div class="home">
        <img alt="Vue logo" src="../assets/logo.png">
    	<h1 ref="msg">msg1:{{msg1}}h1>
    	<h2>msg2:{{msg2}}h2>
    	<h3>msg3:{{msg3}}h3>
    	<button @click="changeMsg()">  button>
      div>
    
    export default {
    	name: 'Home',
    	data() {return {
    		msg1 : "  ",
    		msg2 : '',
    		msg3 : ''
    	}},
    	methods : {
    	changeMsg() {
    		//    
    		//    msg1  ,     ,    ,       ,
    		//                       
    		//                 ,  0  ,        ,
    		//       
    		this.msg1 = "      ";
    		setTimeout(function() {
    			this.msg2 = this.$refs.msg.innerHTML;
    			this.msg3 = this.$refs.msg.innerHTML;
    		},0)
    		}
    	}
    }	
    

    두 번째 방법(중요) - $nextTick
  • 두 번째
  • 그러므로 이 문제를 해결하기 위해서는 $nextTick
  • 을 사용해야 합니다.
    export default {
    	name: 'Home',
    	data() {return {
    		msg1 : "  ",
    		msg2 : '',
    		msg3 : ''
    	}},
    	methods : {
    		changeMsg() {
    			//    
    			//    msg1  ,     ,    ,       ,
    			//                       
    			//                 ,  0  ,        ,
    			//       
    			this.msg1 = "      ";
    			setTimeout(function() {
    				this.msg2 = this.$refs.msg.innerHTML;
    				this.msg3 = this.$refs.msg.innerHTML;
    			},0)
    			
    			
    			//    
    			//           ,    $nextTick
    			this.msg1 = "      ";
    			this.$nextTick( () => {
    			//          ,           
    				this.msg2 = this.$refs.msg.innerHTML;
    			})
    			this.msg3 = this.$refs.msg.innerHTML;
    		}
    	}
    }
    </script>
    

    좋은 웹페이지 즐겨찾기