-
Notifications
You must be signed in to change notification settings - Fork 9
마이그레이션 가이드 (v2 to v3)
Mingyu Kim edited this page Mar 2, 2021
·
2 revisions
Component의 v3에서는 기존 v2의 다음과 같은 단점을 개선하도록 기획되었습니다.
기존 v2 사용자는 eventType
이나 stop()
등 기본적으로 추가되는 이벤트 프로퍼티를 사용할 필요가 없을 때에도 반드시 이를 사용해야만 했습니다.
v3에서는 새롭게 ComponentEvent
라는 클래스를 만들어, 이러한 기본 프로퍼티들을 포함하게 함으로써 이를 극복하고 다양한 이벤트 타입을 사용할 수 있도록 했습니다.
import Component, { ComponentEvent } from "@egjs/component";
// 추가적으로 number, string 등 오브젝트가 아닌 타입도 활용 가능하게 되었습니다.
class Derived extends Component<{
event1: number;
event2: string;
event3: void;
event4: ComponentEvent<{ additionalProp: number }>;
event5: ComponentEvent; // 추가 프로퍼티가 없는 경우
event6: (a: number, b: string) => void;
}> {
// ...
}
타입 추론 기능 사용시, 위의 기본 프로퍼티를 타입에 추가하는 과정에 문제가 있어 interface를 컴포넌트가 트리거하는 이벤트 타입들로써 지정할 수 없었습니다. v3에서는 이를 개선하여 interface를 추가적으로 type형태로 변환해서 사용할 필요가 없도록 변경했습니다.
import Component from "@egjs/component";
interface DerivedEvents {
event1: string;
event2: number;
}
class Derived extends Component<DerivedEvents> {}
컴포넌트에서 기존에 기본적으로 제공되던 프로퍼티들을 활용하시려면 다음과 같이 ComponentEvent
를 사용하시면 됩니다.
import Component from "@egjs/component";
class Derived extends Component<{
event1: { prop1: number; prop2: string };
event2: void;
}> {
// ...
}
const component = new Derived();
// 이벤트 트리거
component.trigger("event1", { prop1: 123, prop2: "abc" });
component.trigger("event2");
import Component, { ComponentEvent } from "@egjs/component";
class Derived extends Component<{
event1: ComponentEvent<{ prop1: number; prop2: string }>;
event2: ComponentEvent;
}> {
// ...
}
const component = new Derived();
// 이벤트 트리거
component.trigger(new ComponentEvent("event1", { prop1: 123, prop2: "abc" }));
component.trigger(new ComponentEvent("event2"));
추가로, ComponentEvent
에 isCanceled()
메소드를 추가함에 따라, 기존에 이벤트의 stop()
이 호출되었는지 여부를 반환하던 trigger
메소드가 this
를 반환하도록 변경했습니다. 이에 따른 코드 변경점은 다음과 같습니다.
const component = new Component();
if (component.trigger("event")) {
// ...stop()이 호출되지 않았을 때에 대한 처리...
}
const component = new Component();
const event = new ComponentEvent("event");
component.trigger(event);
if (!event.isCanceled()) {
// ...stop()이 호출되지 않았을 때에 대한 처리...
}