Light logo

سؤالات متداول

پاسخ سؤالات متداول درباره ReArch رو اینجا پیدا کن.

سؤالات متداول

اگه سؤالی داری، لطفاً یه پست توی بخش بحث‌ها بساز و ممکنه نتیجه‌ش رو اینجا بذارم!

آیا اثرات جانبی حالت باعث بازسازی داخلی می‌شن؟

بله! به‌عنوان یه قانون کلی،
هر اثر جانبی‌ای که یه حالت خارجی نسبت به ساخت (build) رو تغییر بده
و بعد اون حالت یا یه مقدار وابسته به اون حالت رو برگردونه،
احتمالاً باعث بازسازی می‌شه.
به‌عنوان مثال، setState یه مقدار خارجی نسبت به خود ساخت کپسول رو آپدیت می‌کنه (چون یه callback هست)،
و use.state هم state رو برمی‌گردونه، پس بازسازی رو فعال می‌کنه.
در حالی که use.memo یه مقدار حالت رو آپدیت می‌کنه، ولی این کار داخل خود ساخت انجام می‌شه،
پس بازسازی‌ای فعال نمی‌کنه.

آیا rebuild() بازسازی رو فوراً فعال می‌کنه؟ یا می‌تونی پشت سر هم صداش کنی؟

برای کپسول‌ها: بله.
اگه چند بار پشت سر هم rebuild() رو فراخوانی کنی، چند بازسازی فعال می‌شه.
این برای فراخوانی‌های پشت سر هم setState یا چیزهای مشابه هم صدق می‌کنه؛
چند بازسازی فعال می‌شه.
از اونجایی که این معمولاً مطلوب نیست، ReArch "تراکنش‌های اثر جانبی" داره
که می‌تونه یه سری اثر جانبی رو توی یه دسته (batch) اجرا کنه تا فقط یه بازسازی انجام بشه.

dart
final runTransaction = use.transactionRunner();
void updateMultipleEffectsInOneBuild() {
  runTransaction(() {
    setState1(1234);
	setState2(4321);
	invalidateFuture();
	somethingElseThatMayRebuild();
  });
}

برای ویجت‌های فلاتر: خیر.
بازسازی‌ها به‌صورت خودکار توی فریم بعدی از طریق زمان‌بند ساخت فلاتر دسته‌بندی می‌شن
(ReArch داخلیاً از
Element.markNeedsBuild استفاده می‌کنه).

برای اطلاعات بیشتر درباره "تراکنش‌های اثر جانبی" می‌تونی اینجا رو بخونی.

(Dart/Flutter) هدف از SideEffectRegistrar.register() چیه؟

use.register()، همون‌طور که معمولاً دیده می‌شه، برای پیاده‌سازی اثرات جانبی سطح پایین طراحی شده،
و به همین دلیل معمولاً لازم نیست مستقیماً ازش استفاده کنی.
در واقع، این یه ترکیبیه از یه راه برای دسترسی به دنیای بیرون
(از طریق SideEffectApi
به همراه یه راه برای فراخوانی یه تابع خاص فقط توی اولین ساخت،
که می‌تونه برای نگه داشتن حالت بین ساخت‌ها استفاده بشه.

(Dart/Flutter) چطور می‌تونم ReArch رو با fpdart استفاده کنم؟ به‌خصوص که Optionها باهم تداخل دارن.

به این لینک‌ها نگاه کن:
https://github.com/GregoryConrad/rearch-dart/issues/79#issuecomment-1889770035
و
https://github.com/GregoryConrad/rearch-dart/issues/79#issuecomment-1890421419.