$ 界線

規則

  • 只有可序列化數據才能跨越 $ 界線。

序列化界線

每當您跨越轉換為延遲載入形式的函數的詞彙範圍時,就會發生序列化界線。它始終以 $(...)(或 ____$(...))表示。請參閱範例。

import { component$ } from '@builder.io/qwik';
 
export const topLevel = Promise.resolve('nonserializable data');
 
export class MyCustomClass {
  val: string;
 
  constructor(val: string) {
    this.val = val;
  }
}
 
export const Greeter = component$(() => {
  // BEGIN component serialization boundary
 
  // Referring to top level symbols that are exported is always allowed.
  console.log(topLevel); // OK
 
  const captureSerializable = 'serializable data';
  const capturePromise = Promise.resolve('Qwik serializes promises');
  // Instances of custom classes are not serializable.
  const captureNonSerializable = new MyCustomClass('non serializable');
 
  return (
    <button
      onClick$={() => {
        // BEGIN onClick serialization boundary
 
        // Referring to top level symbols that are exported is always allowed,
        // even if the value is non-serializable.
        console.log(topLevel); // OK
 
        // Capturing a non-top-level variable is allowed only if:
        // - declared as `const`
        // - is serializable (runtime error)
        console.log(captureSerializable); // OK
        console.log(capturePromise); // OK
 
        // Referring to captureNonSerializable will pass static analysis but
        // will fail at runtime because Qwik does not know how to serialize it.
        console.log(captureNonSerializable); // RUNTIME ERROR
 
        // END onClick serialization boundary
      }}
    >
      click
    </button>
  );
  // END component serialization boundary
});

貢獻者

感謝所有幫助改進此文件內容的貢獻者!

  • fabien0102
  • wuweiweiwu
  • manucorporat
  • adamdbradley
  • voluntadpear
  • mrhoodz
  • hamatoyogi