هرچند اثرات جانبی ممکنه توی نگاه اول گیجکننده به نظر بیان، ولی دلیل منحصربهفرد بودن ReArch همینن.
هر وقت یه قابلیت توی پیادهسازی اصلی ReArch موجود نباشه،
احتمالاً فقط باید یه اثر جانبی بسازی تا اضافهش کنی!
اثرات جانبی توی پیادهسازی دارت/فلاتر به شدت از هوکهای React الهام گرفته شدن،
ولی یه سری تفاوتهای کلیدی دارن.
توی پیادهسازی Rust، اثرات جانبی یه پارادایم کاملاً جدید هستن و ممکنه نیاز به یه کم تطبیق داشته باشن.
توی ReArch، اثرات جانبی اینطوری مدلسازی شدن:
- یه سری داده تغییرپذیر خصوصی (که فقط خود اثر جانبی بهشون دسترسی داره)
- یه راه برای تغییر دادن اون داده خصوصی خارج از ساخت (که به نوبه خودش بازسازی رو فعال میکنه)
بعد، اثرات جانبی یه API ارائه میدن که دور داده خصوصیشون و هر تغییر خارجیای میپیچه.
برای یه مثال ملموس، بیایم اثر جانبی state رو بررسی کنیم.
API اثر جانبی state، حالت فعلی و یه تابعی برای تنظیم اون حالت فعلیه.
داخلاً، داده تغییرپذیر خصوصی فقط خود حالت فعلیه،
و تغییری که بازسازی رو فعال میکنه فقط یه تابعه
که داده خصوصی (حالت فعلی) رو به یه حالت جدید تنظیم میکنه.
هرچند ممکنه به نظر نیاد،
ولی میتونی هر اثر جانبیای رو با همین روش مدلسازی کنی.
بهعلاوه، در حالی که کپسولها یه گراف جریان داده/وابستگی تشکیل میدن، اثرات جانبی یه درخت تشکیل میدن.
این به اثرات جانبی اجازه میده که اثرات جانبی خصوصی خودشون رو داشته باشن، و ترکیبپذیری رو سادهتر میکنه.
اینجا یه مثال سریع داریم که نشون میده چطور از چند اثر جانبی استفاده کنی.
برای اطلاعات بیشتر، کتابخونه اثرات جانبی و مستندات API رو ببین.
// بعد، بیایم یه نمونه از یه شیء با استفاده از این حالت بسازیم
final somethingMadeWithState = use.memo(() => Something(state), [state]);
// در نهایت، بیایم این شیء رو ثبت کنیم که هر وقت یه نمونه جدید ساخته شد، حذف بشه
use.effect(() => somethingMadeWithState.dispose, [somethingMadeWithState]);
// ...و بیایم اون شیء رو همراه با یه راه برای تنظیم حالت برگردونیم
return (somethingMadeWithState, setState);};
```rust
// کپسولی که تعداد دفعاتی که ساخته میشه رو میشماره
fn count_builds(CapsuleHandle { mut get