Vue

Vue_8 메서드

99duuk 2024. 9. 5. 14:18

메서드

이름 그대로 Vue 인스턴스의 메서드를 말함

Vue 인스턴스의 생성자 옵션 객체에서 method 프로퍼티로 정의함

methods는 데이터 수정 및 서버에 HTTP 요청을 보낼 때 사용함

 

method: {
	메서드명: function() {
		// 처리
	}
}

 

정의된 메서드는 Vue 인스턴스의 메서드로 호출할 수 있음

 

v-on 디렉티브의 속성값에 바인딩하고 뷰에서 이벤트가 발생했을 때 호출되는 형태로 사용하는 것이 가장 흔함. 

템플릿에서도 {{메서드명}}과 같은 형태로 텍스트 전개에 사용할 수 있음

 

 

예) 버튼을 클릭했을 때, 입력한 값을 서버로 전송하는 상황.

<button v-bind:disabled="!canBuy" v-on:click"duBuy">구매</button>

 


 

1. 메서드와 computed의 차이:

  • methods는 호출할 때마다 항상 실행되고, 값을 캐싱하지 않음. 반면, computed는 의존성에 따라 값이 변경될 때만 재계산되고 캐싱됨. 따라서, 복잡한 연산이 필요 없는 경우에 methods를 주로 사용함.

2.메서드의 this:

  • Vue 인스턴스 내에서 정의된 methods는 **Vue 인스턴스를 가리키는 this**에 접근할 수 있음. 이를 통해 데이터 속성, 다른 메서드, 반응형 데이터에 접근하고 이를 조작할 수 있음.

3. 비동기 작업:

  • 서버에 HTTP 요청을 보낼 때 주로 메서드를 사용함. axios 같은 라이브러리를 사용하여 메서드 내에서 API 호출을 처리하고, 결과를 반응형 데이터에 저장할 수 있음.

 

1. 메서드의 정의 및 사용

<div id="app">
  <p>{{ message }}</p>
  <button @click="reverseMessage">Reverse Message</button>
</div>

 

new Vue({
  el: '#app',
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  methods: {
    reverseMessage() {
      this.message = this.message.split('').reverse().join('');
    }
  }
});

 

  • reverseMessage라는 메서드를 정의함.
  • 버튼을 클릭하면 @click 디렉티브를 통해 reverseMessage 메서드가 호출되고, message 데이터가 뒤집힘.
  • this.message를 통해 Vue 인스턴스의 데이터를 조작함.

 

 

2. 서버 요청과 메서드

<div id="app">
  <p>{{ userData }}</p>
  <button @click="fetchUserData">Get User Data</button>
</div>
new Vue({
  el: '#app',
  data() {
    return {
      userData: 'No data yet'
    };
  },
  methods: {
    fetchUserData() {
      // 가상의 API 호출
      fetch('https://jsonplaceholder.typicode.com/users/1')
        .then(response => response.json())
        .then(data => {
          this.userData = data.name; // API에서 받은 데이터를 반응형 데이터에 저장
        })
        .catch(error => {
          console.error('Error fetching user data:', error);
        });
    }
  }
});

 

  • fetchUserData라는 메서드에서 API 호출을 수행.
  • 버튼을 클릭하면 API에서 데이터를 가져와 userData에 저장하고, 그 결과가 화면에 표시됨.
  • 비동기 작업이 완료되면 결과 데이터를 반응형 데이터로 업데이트함.

 

 

3. 템플릿에서 메서드 사용 

<div id="app">
  <p>Original message: {{ message }}</p>
  <p>Uppercase message: {{ toUpperCaseMessage() }}</p>
</div>

 

new Vue({
  el: '#app',
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  methods: {
    toUpperCaseMessage() {
      return this.message.toUpperCase();
    }
  }
});
    • 템플릿에서 toUpperCaseMessage 메서드를 직접 호출하여 원본 메시지를 대문자로 변환한 결과를 보여줌.
    • 메서드를 템플릿에서 호출할 때마다 항상 실행되며, 캐싱되지 않음.