export default function Suggestion({target}){
this.element = document.createElement('ul');
this.element.className = 'suggestion 스타일 입히는 클래스';
target.addChild(this.element);
this.state = {
searchResult: [],
}
this.setState = (nextState) => {
this.state = {
...this.state,
...nextState
}
this.render();
}
this.render = () => {
const searchResult = this.state.searchResult;
if(searchResult.length > 0){
this.element.innerHTML = `${
searchResult.map(item=>`<li>${item}</li>`).join("")
}`;
this.element.style.display = 'block';
}
else{
this.element.style.display = 'none';
}
}
this.render();
}
App
컴포넌트의 state
가 변경될 때 Suggestion
의 setState
메서드를 함께 사용하여 searchResult
를 변경하고, 해당 메서드가 호출될 때마다 render
메서드를 호출하여 화면에 다시 렌더링을 진행한다.
export default function App({target}){
//... 이전 코드
this.setState = (nextState) => {
this.state = {
...this.state,
...nextState
}
suggestion.setState({
searchResult: this.state.searchResult
});
}
const suggestion = new Suggestion({
target: document.querySelector('Suggestion')
});
}
App
컴포넌트에서는 suggestion
객체를 새로 생성한다. 그리고 App
의 setState
메서드가 사용될 때마다 suggestion
의 setState
메서드를 함께 호출하여 변경된 사항을 suggestion
객체에 전달하여 화면에 렌더링 시킨다.