Skip to content

createSignal

سیگنالی در ساده‌ترین شکل: [خواندن، نوشتن]، و در صورت خواست، پخش خبر روی گذرگاه مشترک subscribers تا پیمانه‌های بی‌ربط هم بتوانند به دگرگونی واکنش نشان دهند.

API

createSignal(value, options?)

پارامترها

پارامترتوضیحنوعپیش‌فرض
valueمقدار آغازینTالزامی
options.subscriberنام رویداد؛ هنگام دگرگونی روی subscribers خبر می‌دهدstringundefined
options.equalsاینکه «آیا عوض شد» چگونه سنجیده شودboolean | ((prev: T, next: T) => boolean)true

معنای equals:

مقداررفتار
نیامده یا trueObject.is: برابری ارجاعی یا مقداری (رفتار استاندارد سیگنال‌ها)
falseهر نوشتن دگرگونی به شمار می‌آید و خبر می‌دهد
یک تابعبازگرداندن true یعنی «برابرند، خبر نده»

بازگشت

[getter, setter].

نمونه

js
import { createSignal, isEqual, subscribers } from 'ranuts';

const [count, setCount] = createSignal(0, { subscriber: 'count-changed' });
subscribers.tap('count-changed', () => render(count()));

setCount(1); // خبر می‌دهد
setCount(1); // همان مقدار — خبری نمی‌دهد

// مقایسهٔ ژرف را تنها وقتی واقعاً لازم دارید برگزینید
const [tree, setTree] = createSignal(initial, { equals: isEqual });

یادداشت‌ها

  1. به‌طور پیش‌فرض برابری ارجاعی است. شیئی که تازه ساخته شده ولی درونش یکی است، دگرگونی هست. این همان رفتار استاندارد سیگنال‌هاست و نوشتن را در O(1) نگه می‌دارد.
  2. مقایسهٔ ژرف را باید خواست، با { equals: isEqual }، تا هزینه‌اش در محل فراخوانی پیدا باشد.
  3. subscriber اختیاری است. بی آن، سیگنال صرفاً حالتی محلی است.

در ۰٫۳ دگرگون شد

دو اصلاح که رفتار را عوض می‌کنند:

  • { equals: true } پیش‌تر یعنی «همیشه برابر»، که سیگنال را می‌بست و هرگز به‌روز نمی‌شد. اکنون یعنی «از مقایسهٔ پیش‌فرض استفاده کن»، هم‌سنگ undefined.
  • پیش‌تر هر نوشتن، افزون بر equals، cloneDeep و isEqual را هم می‌دواند. این یعنی گذاشتن رونوشتی به اندازهٔ داده روی مسیر پرتردد نوشتن، و آن وارسی ژرفِ اضافه equals را از کار می‌انداخت، پس { equals: false } («همیشه خبر بده») برای مقدارهای درون‌یکسان خاموشانه هیچ نمی‌کرد. هر دو برداشته شدند.

منتشرشده تحت مجوز MIT.