inflearn logo
강의

Khóa học

Chia sẻ kiến thức

JavaScript hoàn thành trong một lần: Từ JavaScript thuần đến phát triển SPA

Phát triển Header

콜백 함수 메서드 등록

Đã giải quyết

82

potato9801245279

7 câu hỏi đã được viết

0

 

export default function CityList({ $app, intialState, handleLoadMore }) {
  this.state = intialState;
  this.$target = document.createElement("div");
  this.$target.className = "city-list";
  this.handleLoadMore = handleLoadMore;
  $app.appendChild(this.$target);
  this.template = () => {
    let temp = `<div class="city-items-container">`;
    if (this.state) {
      this.state.cities.forEach((elm) => {
        temp += `
        <div class="city-item" id=${elm.id}>
          <img src=${elm.image}></img>
          <div class="city-item-info">${elm.city},${elm.country}</div>
          <div class="city-item-score">❤️${elm.total}</div>
        </div>
        `;
      });
    }
    temp += `</div>`;
    return temp;
  };
  this.render = () => {
    this.$target.innerHTML = this.template();
    if (!this.state.isEnd) {
      const $loadMoreBtn = document.createElement("button");
      $loadMoreBtn.className = "add-items-btn";
      $loadMoreBtn.textContent = "더보기";

      this.$target.appendChild($loadMoreBtn);
      $loadMoreBtn.addEventListener("click", this.handleLoadMore);
    }
  };
  this.setState = (newState) => {
    this.state = newState;
    this.render();
  };
  this.render();
}

 

이 코드에서

this.handleLoadMore=handleLoadMore;

이부분이 왜 필요한지 이해가 되지 않아서 질문드립니다.
콜백 함수를 이벤트 리스너에 등록 해도 되지 않나요?

this로 메서드 등록해서 사용하는 이유가 궁금합니다.

추가적으로 바닐라 js 로 spa 구현하는 개념들이 매우 어렵고 복잡하게 느껴지는데
바닐라 js로 spa를 구현해보는 프로젝트를 해보고 프레임워크로 넘어가야 하는것일까요..

javascript rest-api spa dom

Câu trả lời 2

0

hyobin

안녕하세요 🙂 질문 감사합니다.

강의에서 제공되는 프로젝트 상으로는 꼭 필요한 것은 아닙니다.

다만, this.hanldeLoadMore로 저장하는 이유는 코드의 일관성과 프로젝트의 확장성 때문인데요,
추후에 이벤트 리스너를 제거하거나, 컴포넌트 내 다른 메서드에서도 재사용할 수 있기 때문입니다.


추가적으로 바닐라 JS로 SPA를 완벽하게 구현할 필요는 없습니다.

강의에서 다루는 내용 정도만 경험해보셨다면, 바로 React나 Next 등으로 넘어가서 학습을 해보시고,
이런 라이브러리와 프레임워크들이 바닐라로 구현했던 것을 쉽게 할 수 있게 도와주는구나!를 느끼시는게 오히려 학습에 더 도움이 되실 것 같습니다 🙂

0

potato9801245279

감사합니다 ^^

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 코딩님!

해당 코드는 컴포넌트 구조를 가지고 있는 JavaScript 패턴을 활용하여 CityList 객체를 만드는 과정입니다. 여기서, handleLoadMoreCityList 객체에 속성으로 전달된 콜백 함수로, 이 함수는 주로 데이터를 더 로드하는 버튼, 즉 “더보기” 버튼에 대한 클릭 이벤트를 처리하는 역할을 합니다.

this.handleLoadMore = handleLoadMore;의 필요성

  1. 컨텍스트 공유: this에 메서드로 등록해두면, 이후 이 콜백 함수가 실행될 때 CityList 객체의 다른 프로퍼티나 메서드로부터 정보나 메서드를 사용할 수 있게 됩니다. 만약 이벤트 리스너나 다른 함수 호출에서 handleLoadMore를 직접 설정하지 않으면 this 컨텍스트가 변경될 수 있습니다.

  2. 일관된 접근: 이처럼 this에 등록해두면, 객체 내 다른 메서드들이 콘텍스트 문제 없이 일관되게 접근하고 사용할 수 있습니다.

  3. 코드 유지보수성: 이 패턴을 사용하면, 객체가 자신의 속성이나 메서드를 통해서 콜백 함수들(conceptually part of the object)을 관리하기 때문에 코드의 유지보수가 용이해집니다.

handleLoadMore를 직접 이벤트 리스너에 넣어줄 수도 있지만, 객체지향적인 접근을 통한 유지보수를 쉽게 하고 확장성 있는 코드를 구성하기 위해 이 패턴이 사용됩니다.

아래 유사한 질문에 대한 링크에서 더 자세한 설명을 확인해 보실 수 있습니다:
- CityList개발-handleLoadMore함수질문
- citiList 의 더보기 버튼 함수

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ssr방식 경험

0

76

1

compare 함수 설명에 오해의 소지가 있어보입니다.

0

83

2

API를 비동기 처리하는 이유가 끊겨서 그런건가요?

0

98

2

DOM 트리 보는 곳

0

81

1

배열과 객체의 구조분해할당 방법이 다른 이유

0

82

2

배열 메서드가 순수 함수인지 확인하는 방법

0

72

2

콜백 함수의 매개변수로 _를 쓰는 이유가 무엇인가요?

0

71

2

콜백 함수의 매개변수는 어떻게 구분되나요?

0

59

1

호이스팅 안쓰는게 좋나요?

0

54

2

함수 선언식과 함수 표현식은 어떤 경우에 쓰면 좋나요?

0

82

2

?. 연산자는 자바스크립트 연산자인가요?

0

47

1

JS의 논리 연산자 &&, ||가 리액트의 조건부 렌더링 &&, ||인가요?

0

83

2

자바스크립트 질문

1

103

2

동물앨범만들기 1-1 api 오류

0

54

2

CityList개발-handleLoadMore함수질문

0

71

1

객체와 배열의 const 차이

0

46

1

const 객체/배열 차이

0

63

2

header 개발 새로고침 오류

0

67

2

Promise 객체

1

58

2

cityList 렌더가 안되는 문제

0

55

2

init 함수 앞에 await

1

66

2

동물 앨범 만들기 pushtState 관련

0

60

2

동물 앨범 만들기 사진 관련 문의

0

75

2

자바스크립트 첫걸음 교재 질문..

1

81

2