createSignal
سیگنالی در سادهترین شکل: [خواندن، نوشتن]، و در صورت خواست، پخش خبر روی گذرگاه مشترک subscribers تا پیمانههای بیربط هم بتوانند به دگرگونی واکنش نشان دهند.
API
createSignal(value, options?)
پارامترها
| پارامتر | توضیح | نوع | پیشفرض |
|---|---|---|---|
value | مقدار آغازین | T | الزامی |
options.subscriber | نام رویداد؛ هنگام دگرگونی روی subscribers خبر میدهد | string | undefined |
options.equals | اینکه «آیا عوض شد» چگونه سنجیده شود | boolean | ((prev: T, next: T) => boolean) | true |
معنای equals:
| مقدار | رفتار |
|---|---|
نیامده یا true | Object.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 });یادداشتها
- بهطور پیشفرض برابری ارجاعی است. شیئی که تازه ساخته شده ولی درونش یکی است، دگرگونی هست. این همان رفتار استاندارد سیگنالهاست و نوشتن را در O(1) نگه میدارد.
- مقایسهٔ ژرف را باید خواست، با
{ equals: isEqual }، تا هزینهاش در محل فراخوانی پیدا باشد. subscriberاختیاری است. بی آن، سیگنال صرفاً حالتی محلی است.
در ۰٫۳ دگرگون شد
دو اصلاح که رفتار را عوض میکنند:
{ equals: true }پیشتر یعنی «همیشه برابر»، که سیگنال را میبست و هرگز بهروز نمیشد. اکنون یعنی «از مقایسهٔ پیشفرض استفاده کن»، همسنگundefined.- پیشتر هر نوشتن، افزون بر
equals،cloneDeepوisEqualرا هم میدواند. این یعنی گذاشتن رونوشتی به اندازهٔ داده روی مسیر پرتردد نوشتن، و آن وارسی ژرفِ اضافهequalsرا از کار میانداخت، پس{ equals: false }(«همیشه خبر بده») برای مقدارهای درونیکسان خاموشانه هیچ نمیکرد. هر دو برداشته شدند.