اگه سؤالی داری، لطفاً یه پست توی بخش بحثها بساز و ممکنه نتیجهش رو اینجا بذارم!
بله! بهعنوان یه قانون کلی،
هر اثر جانبیای که یه حالت خارجی نسبت به ساخت (build) رو تغییر بده
و بعد اون حالت یا یه مقدار وابسته به اون حالت رو برگردونه،
احتمالاً باعث بازسازی میشه.
بهعنوان مثال، setState یه مقدار خارجی نسبت به خود ساخت کپسول رو آپدیت میکنه (چون یه callback هست)،
و use.state هم state رو برمیگردونه، پس بازسازی رو فعال میکنه.
در حالی که use.memo یه مقدار حالت رو آپدیت میکنه، ولی این کار داخل خود ساخت انجام میشه،
پس بازسازیای فعال نمیکنه.
برای کپسولها: بله.
اگه چند بار پشت سر هم rebuild() رو فراخوانی کنی، چند بازسازی فعال میشه.
این برای فراخوانیهای پشت سر هم setState یا چیزهای مشابه هم صدق میکنه؛
چند بازسازی فعال میشه.
از اونجایی که این معمولاً مطلوب نیست، ReArch "تراکنشهای اثر جانبی" داره
که میتونه یه سری اثر جانبی رو توی یه دسته (batch) اجرا کنه تا فقط یه بازسازی انجام بشه.
final runTransaction = use.transactionRunner();
void updateMultipleEffectsInOneBuild() {
runTransaction(() {
setState1(1234);
setState2(4321);
invalidateFuture();
somethingElseThatMayRebuild();
});
}برای ویجتهای فلاتر: خیر.
بازسازیها بهصورت خودکار توی فریم بعدی از طریق زمانبند ساخت فلاتر دستهبندی میشن
(ReArch داخلیاً از
Element.markNeedsBuild استفاده میکنه).
برای اطلاعات بیشتر درباره "تراکنشهای اثر جانبی" میتونی اینجا رو بخونی.
use.register()، همونطور که معمولاً دیده میشه، برای پیادهسازی اثرات جانبی سطح پایین طراحی شده،
و به همین دلیل معمولاً لازم نیست مستقیماً ازش استفاده کنی.
در واقع، این یه ترکیبیه از یه راه برای دسترسی به دنیای بیرون
(از طریق SideEffectApi)،
به همراه یه راه برای فراخوانی یه تابع خاص فقط توی اولین ساخت،
که میتونه برای نگه داشتن حالت بین ساختها استفاده بشه.
به این لینکها نگاه کن:
https://github.com/GregoryConrad/rearch-dart/issues/79#issuecomment-1889770035
و
https://github.com/GregoryConrad/rearch-dart/issues/79#issuecomment-1890421419.
