Rehberler

Bileşen Kütüphanesi Yazmak

Uygulamaların kullandığı bir bileşen kütüphanesinin kuralları; prop'ların tek bir bağla izlenmesi, geliştiricinin verisinin olduğu gibi kullanılması, bileşenin içinde hiçbir şeyin izlenmemesi, elle çizilen parçalar, değişince yazma, geliştiricinin bileşenine geçici öznitelik, olayın geldiği bileşen, ömür tuzakları ve ölçme.

Bir bileşen kütüphanesi (kontroller, bir veri ızgarası, bir planlayıcı), tanımadığı uygulamalarda ve çoğu zaman bir sayfada binlerce parçasıyla kullanılır. Uygulama kodu reaktiviteye yaslanabilir; kütüphane kodu yaslanmamalıdır. Bu sayfadaki kurallar eksiksiz bir kit yazılıp ölçülerek çıkarıldı. Önce Bileşen Oluşturma ve Bileşen Bağları sayfalarını okuyun.

Üç giriş

Bir kütüphane bileşeni yalnızca üç şeyi dinler:

  1. Prop'ları: her biri bir değer ya da bir fonksiyon (Bind<T>).
  2. Geliştiricinin verisi: olduğu gibi kullanılır. Aynı nesneler tutulur ve geri verilir; reactive() ile sarılmaz, kopyalanmaz, dönüştürülmez. Yerinde yapılan bir değişiklik reState() ya da açık bir refresh() ile yeniden okunur.
  3. Geliştiricinin reState() çağrısı.

Geri kalan her şey bileşenin kendi durumudur ve bileşen onu elle çizer.

Prop'lar: değer ya da fonksiyon, tek bir bağla izlenir

const handed = new WeakMap<object, { value: unknown }>();
export function handOver<V>(control: { value: V }, value: V) {
  const last = handed.get(control);
  if (last && Object.is(last.value, value)) return;
  handed.set(control, { value });
  control.value = value;
}

İçeride hiçbir şey izlenmez

export function onLanguage(component: ComponentBase, draw: () => void) {
  untracked(draw);
  const changed = uiLocale.onChanged(() => !component.isDisposed && untracked(draw));
  component.motif.setDisposable(() => changed.dispose());
}

Bileşenin ağacı

Değişince yazma

Geliştiricinin bileşenine geçici öznitelik

const held = part.attr.hold({ disabled: true, tabindex: -1, "aria-disabled": "true" });
this.motif.register(held);

Olayın geldiği bileşen

this.motif.on("click:capture", (_sender, e) => {
  if (part.motif.isEventFrom(e)) return;
  e.preventDefault();
  e.stopImmediatePropagation();
});

Ömür

Uzun işler

İşi doğrulamak

Sonraki adım

Kütüphaneyi yayımlamak için MotifJS için npm Kütüphanesi Yayımlama sayfasına geçin.