بارگذاری دادهٔ راهدور در $mol یک API ویژه نیست — یک مقدار ناهمزمان صرفاً یک ویژگیِ واکنشگراست که چنان نوشته شده که انگار پاسخ از پیش آنجاست. نما منتظرش میماند، یک وضعیت بارگذاری نشان میدهد و وقتی داده رسید دوباره رندر میکند.
شبکه را درونِ یک @ $mol_mem صدا بزنید و نتیجهٔ پارسشده را برگردانید. نه promiseای در کد هست، نه awaitی و نه کالبکی:1namespace $.$${2export class $my_usersextends$.$my_users{3@ $mol_mem4users(){5return this.$.$mol_fetch.json('https://api.example.com/users')as{6id:number7name:string8}[]9}10}11}$mol_fetch فایبر را تا رسیدن پاسخ معلق میکند، بعد محاسبه از نو راه میافتد و users() آرایه را برمیگرداند. تا وقتی در حال انتظار است، هر نمایی که users() را میخواند بهطور خودکار وضعیت بارگذاریِ توکار را نشان میدهد — هیچ پرچمِ isLoading نمینویسید. خودتان از یک @ $mol_mem promise برنگردانید: promiseای که بهعنوان مقدار ذخیره شود سلول را برای همیشه در وضعیتِ بارگذاری نگه میدارد، رفع اشکال را ببینید.this.$ زمینهٔ کامپوننت است. هر سرویسی از همین راه میآید: $mol_fetch برای شبکه، $mol_state_arg برای URL، $mol_after_timeout برای زمان. در یک تست زمینه جایگزین میشود، پس همان users() درخواستش را بهجای شبکه به یک ماک میفرستد، بیآنکه خطی از کامپوننت عوض شود. تستنویسی همان ماک را نشان میدهد.
دادهٔ حلشده را مستقیماً به یک فهرست متصل کنید:1@ $mol_mem2user_names(){3return this.users().map(user=>user.name)4}وقتی پاسخ میرسد، users() بهروز میشود، user_names() بازمحاسبه میشود و فهرست رندر میشود. نه کالبکی، نه useEffectای.
چون فقط یک سلولِ واکنشگراست، با بیاعتبارکردنش دوباره واکشی میکنید. به یک توکن که میتوانید افزایشش دهید وابسته شوید:1@ $mol_mem2reload_token(next?:number){3return next??04}56@ $mol_mem7users(){8this.reload_token()// subscribe9return this.$.$mol_fetch.json('https://api.example.com/users')asunknown[]10}1112@ $mol_action13reload(){14this.reload_token(this.reload_token()+1)15}ویرایش این صفحه در GitHubآیا این مفید بود؟بلهخیرقبلیرفع اشکالبعدیطرحوارههای دادهدر این صفحهیک ویژگیِ ناهمزمانرندرِ نتیجهبارگذاری دوبارهخطاهابعدیType to search the documentation.