LitElement 및 TypeScript를 사용하여 속성 변경 내용 관찰 방법
6349 단어 litelementtypescript
@property
와 @internalProperty
장식기의 사용법을 설명했다.또한 LitElement이 선언의 등록 정보를 관리하는 방법과 해당 선언의 업데이트 주기를 트리거하여 어셈블리가 정의된 템플릿을 다시 렌더링하는 방법에 대해서도 설명했습니다.며칠 전에 한 개발상 사이트에서 이런 부동산 변화에 관한 재미있는 문제를 보았다.
How to observe @property changes in a LitElement component?
본문에서 나는 어떻게 관찰하는가(그리고'반응'이 가능하다?)를 설명할 것이다.이러한 속성은 LitElement 어셈블리의 라이프 사이클을 고려합니다.
LitElement 속성 관리 방법 실용적인 용례
사용자 목록을 표시할 작은 프로그램을 만들고 있다고 가정하십시오.둘 중 하나를 선택할 수 있으며 추가 세부 정보를 표시해야 합니다.이 경우 주소 정보가 표시됩니다.
첫걸음
우리는 처음부터 완전한 프로젝트를 만드는 것이 아니라 를 기점으로 할 것이다.링크를 열고 다음 단계를 계속하기 위해 포크를 만듭니다.
@속성 vs@internalProperty 프레젠테이션 프로젝트 내용
fork를 완료하면 다음 항목이 준비됩니다.
- 사용자와 주소를 테스트하기 위해 두 개의 상수를 내보내는 데이터 세트
LitElement의 두 웹 구성 요소 사용
MainViewer
, 이것은 용기 구성 요소로 사용자 목록과 상세한 정보를 표시합니다.AddressViewer
는 하위 구성 요소로 메인 목록에서 선택한 userId
를 수신합니다.재산 변동
잠시 후 고려할 주요 속성을 알아보기 위해 기존 구성 요소를 더 자세히 살펴보자.
main-viewer.ts
파일은 다음 템플릿을 정의합니다.<div>
<h1>User Address Viewer</h1>
<!-- The User list is rendered here -->
<!-- Child component rendered below -->
<address-viewer .userId=${this.userId}></address-viewer>
</div>
코드 세션은 userId
속성의 상관성을 보여 줍니다. 이 속성은 MainViewer
구성 요소의 일부분입니다.변경할 때마다 렌더링 함수를 트리거하여 새 속성 값을 서브어셈블리로 보냅니다(<address-viewer userId=${newValue}>
.한편,
address-viewer.ts
파일은 공공 속성userId
을 정의하고 내부 속성이 필요한지 확인Address
대상:// address-viewer.ts
@customElement("address-viewer")
class AddressViewer extends LitElement {
@property({ type: Number }) userId: number;
@internalProperty() userAddress?: Address;
}
userId
구성 요소의 AddressViewer
속성에 주목하여 이러한 변화를 어떻게 관찰하는지 알아보겠습니다.성능 변화 관찰
새 값이 성명된 속성으로 설정되면 업데이트 주기를 촉발하여 다시 프로세스를 나타냅니다.이 모든 것이 발생할 때, 서로 다른 방법을 사용합니다. 우리는 그 중의 몇 가지 방법을 사용하여 어떤 속성을 변경했는지 알 수 있습니다.
속성의 setter 방법
이것은 우리가 변화를 관찰하는 첫 번째 곳이다.
@property()
파일의 address-viewer.ts
선언을 업데이트합니다.// address-viewer.ts
@customElement("address-viewer")
class AddressViewer extends LitElement {
@property({ type: Number }) set userId(userId: number) {
const oldValue = this._userId;
this._userId = userId;
this.requestUpdate("userId", oldValue);
}
private _userId: number;
constructor() {
super();
}
get userId() {
return this._userId;
}
}
보시다시피 새로운 set
속성을 처리하기 위해 get
방법과 _userId
방법을 추가했습니다.액세서리 방법을 사용할 때, 새로운 개인 속성을 만드는 것은 흔히 볼 수 있는 방법이다._userId
의 밑줄 접두사도 코드 약정이다.단, setter 방법을 작성하기 때문에, 구성 요소의 업데이트를 계획하기 위해 수동으로
requestUpdate
방법을 호출해야 할 수도 있습니다.다시 말하면 LitElement은 성명된 속성을 위한 setter 방법을 생성하고 자동으로 호출한다. requestUpdate
requestUpdate 메서드
구성 요소 상태나 속성을 기반으로 업데이트 요소를 변경할 때 이 방법을 사용합니다.
update()
와 render()
함수를 호출하기 전에 새로운 값을 포획하기에 좋은 곳입니다.// address-viewer.ts
requestUpdate(name?: PropertyKey, oldValue?: unknown) {
const newValue = this[name];
// You can process the "newValue" and "oldValue" here
// ....
// Proceed to schedule an update
return super.requestUpdate(name, oldValue);
}
이 예에서, 이 방법은 이전 값 oldValue
과 함께 변경된 속성의 이름을 수신합니다.마지막으로 꼭 전화하세요super.requestUpdate(name, oldValue)
.업데이트 방법
이것은 속성 변경을 관찰하는 또 다른 옵션입니다.다음 예제를 참조하십시오.
update(changedProperties: Map<string, unknown>) {
if (changedProperties.has("userId")) {
const oldValue = changedProperties.get("userId") as number;
const newValue = this.userId;
this.loadAddress(newValue);
}
super.update(changedProperties);
}
이전 옵션과 비교하면 update
방법의 특징은 약간 다르다.changedProperties 매개 변수는
Map
구조로 키가 성명된 속성의 이름이며 값은 옛 값에 대응한다(새 값이 설정되어 있으며 this.<propertyName>
를 통해 얻을 수 있다).재산이 변경되었는지 확인하려면
changedProperties.has("<propName>")
를 사용하십시오.속성이 변경된 경우 changedProperties.get("<propName>")
를 사용하여 이전 값에 액세스합니다.성명의 속성 정의와 일치하는 정적 형식이 필요합니다.다시 작성하여 DOM을 렌더링하고 업데이트할 수 있습니다.이 경우 렌더링 프로세스를 계속하려면 마지막 호출
super.update(changedProperties)
을 수행해야 합니다.이 방법에 속성을 설정하면 다른 업데이트를 터치하지 않습니다.
업데이트 방법
이 방법의 서명은
update
와 일치할 것입니다.그러나 요소의 DOM이 업데이트되고 렌더링될 때 이 메서드가 호출됩니다.구성 요소의 생명주기 끝에 있기 때문에 다른 방법을 사용할 필요가 없습니다.updated(changedProperties: Map<string, unknown>) {
console.log(`updated(). changedProps: `, changedProperties);
if (changedProperties.has("userId")) {
// get the old value here
const oldValue = changedProperties.get("userId") as number;
// new value is
const newValue = this.userId;
}
// No need to call any other method here.
}
이 방법을 사용할 수 있습니다.유형 선언 현장 프레젠테이션
이 코드 한번 해볼래요?Stackblitz 편집기만 열면 됩니다.
문제가 있으면 언제든지 연락 주세요.계속해서 저 를 주목해 주시고 제 일에 대한 더 많은 정보를 얻으세요.
현대 인터넷 컨설팅 회사로 기업의 디지털화 전환을 돕는 데 주력하고 있다.React, Angular, Vue, 웹 구성 요소,GraphQL,Node,Bazel 또는 Polymer에 대한 전문가 구조 지도, 교육 또는 문의는 방문 하십시오.
이런 인터넷 매체는 모든 사람을 위해 포용성과 교육적인 네트워크를 만드는 데 전념한다.이벤트, 팟캐스트, 무료 콘텐츠를 통해 현대 인터넷의 최신 진전을 알 수 있습니다.자세한 내용은 GitHub를 참조하십시오.
Reference
이 문제에 관하여(LitElement 및 TypeScript를 사용하여 속성 변경 내용 관찰 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thisdotmedia_staff/how-to-observe-property-changes-with-litelement-and-typescript-4c26텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)