توضیح مفصل نحوه استفاده از Link در Hongmeng Next

Summarize this content to 400 words in Persian Lang
1. نمای کلی @link
در Hongmeng Next،@Linkدکوراتورها برای ایجاد یک رابطه همگام سازی دو طرفه داده بین اجزای والد و فرزند استفاده می شوند. این بدان معناست که جزء فرزند است@Linkمتغیرهای تزئین شده و منابع داده مربوط به آنها در مؤلفه های والد می توانند داده ها را با یکدیگر همگام کنند. از API نسخه 9 این دکوراتور برای استفاده در کارت های ArkTS و از API نسخه 11 برای استفاده در خدمات متا پشتیبانی می شود.
(1) مکانیسم همگام سازی
منبع داده در جزء والد (مانند@State،@StorageLinkو@Link) با اجزای فرعی@Linkاجرای همگام سازی دو طرفه داده بین متغیرهای تزئین شده.
تغییرات دادههای هر دو طرف در زمان واقعی با طرف دیگر همگامسازی میشوند.
(2) محدودیت ها
@Linkدکوراتورها نمی توانند وارد شوند@Entryدر اجزای سفارشی تزئین شده استفاده می شود.
2. قوانین استفاده از دکوراتورها
پارامتر: بدون پارامتر
نوع همگام سازی: همگام سازی دو طرفه.
انواع متغیر که مجاز به تزئین هستند
شی، کلاس، رشته، عدد، بولی، انواع enum و آرایه های آنها.
نوع تاریخ پشتیبانی
API11 و بالاتر از انواع Map و Set پشتیبانی می کند.
از انواع اتحادیه Length، ResourceStr و ResourceColor که توسط چارچوب ArkUI تعریف شده است پشتیبانی می کند.
نوع باید مشخص شود و باید همان نوع متغیر حالت محدود دو طرفه باشد. API11 و بالاتر از انواع ترکیبی پشتیبانی نمی شود (مانند رشته | عدد، رشته | تعریف نشده یا ClassA | تهی).
هنگام استفاده از undefined و null، توصیه می شود نوع را به صراحت مشخص کنید و از بررسی نوع TypeScript پیروی کنید.
مقدار اولیه متغیر تزئین شده: هیچ، مقداردهی اولیه محلی ممنوع است.
3. قوانین انتقال/دسترسی متغیر
راه اندازی و به روز رسانی از مولفه والد
الزامی است، با جزء اصلی@State،@StorageLinkو@Linkیک اتصال دو طرفه ایجاد کنید.
اجازه در مؤلفه والد@State،@Link،@Prop،@Provide،@Consume،@ObjectLink،@StorageLink،@StorageProp،@LocalStorageLinkو@LocalStoragePropزیرمولفه مقداردهی اولیه متغیر تزئین@Link. شروع از API نسخه 9،@Linkمؤلفه فرزند از مؤلفه والد مقداردهی اولیه شد@Stateنحو Comp({ aLink: this.aState }) است و Comp({aLink: $aState}) نیز پشتیبانی می شود.
برای مقداردهی اولیه اجزای فرزند استفاده می شود: مجاز است، می تواند برای مقداردهی اولیه متغیرهای منظم استفاده شود،@State،@Link،@Prop،@Provide.
اینکه آیا دسترسی خارج از مؤلفه پشتیبانی می شود یا خیر: خصوصی، فقط در مولفه مالک قابل دسترسی است.
4. تغییرات و عملکرد رفتاری را مشاهده کنید
(1) تغییرات را مشاهده کنید
انواع پایه (بولی، رشته ای، عددی): تغییرات در مقادیر را می توان به صورت همزمان مشاهده کرد.
کلاس یا نوع شی: می توانید تغییرات را در انتساب ها و انتساب های ویژگی مشاهده کنید (یعنی تمام ویژگی های بازگردانده شده توسط Object.keys(observedObject)).
نوع آرایه: می توانید تغییراتی را در افزودن، حذف و به روز رسانی سلول های آرایه به آرایه مشاهده کنید.
نوع تاریخ: می توانید انتساب کلی Date و عملیات به روز رسانی ویژگی ها را از طریق رابط آن مشاهده کنید.
نوع نقشه (API11 و بالاتر): می توانید انتساب کلی نقشه و عملیات به روز رسانی مقدار را از طریق رابط آن مشاهده کنید.
نوع تنظیم (API11 و بالاتر): شما می توانید انتساب کل مجموعه و عملیات به روز رسانی مقدار را از طریق رابط آن مشاهده کنید.
(2) رفتار چارچوب
رندر اولیه
مولفه والد را اجرا کنیدbuild()تابع نمونه جزء فرزند را ایجاد می کند.
باید در مولفه والد مشخص شود@Stateمقداردهی اولیه متغیر مولفه های فرعی@Linkمتغیرها، این دو همگام باقی می مانند. جزء والد@Stateکلاس بسته بندی متغیر حالت به زیر مولفه و زیر مولفه منتقل می شود@Linkکلاس wrapper اشاره گر خود را به جزء والد ثبت می کند@Stateمتغیر
به روز رسانی منبع داده (مولفه والد به جزء فرزند)
جزء والد@Stateپس از تغییر متغیر، تمام اجزای سیستم و متغیرهای وابسته به آن (مانند@Linkنوع بسته بندی).
اطلاع دهد@Linkپس از به روز رسانی کلاس بسته بندی، وابستگی های موجود در جزء فرعی@Linkاجزای سیستم متغیرهای حالت نیز برای دستیابی به همگام سازی داده های حالت از مؤلفه های والد به مؤلفه های فرزند به روز می شوند.
@Linkبه روز رسانی (جزء فرزند به جزء والد)
@Linkپس از بهروزرسانی، با مؤلفه والد تماس بگیرید@Stateبسته بندیsetروشی برای همگام سازی مقدار به روز شده به مؤلفه والد.
جزء فرعی@Linkو جزء والد@Stateبه ترتیب اجزای سیستم وابسته را طی کنید، بهروزرسانیهای رابط کاربری مربوطه را انجام دهید و اجزای فرعی را پیادهسازی کنید.@Linkهمگام سازی بازگشت به مؤلفه والد@State.
5. نمونه هایی از سناریوهای استفاده
(1) انواع ساده و انواع شی کلاس@Link
جزء والدShufflingContainerدر@Stateمتغیر (نوع سادهyellowButtonPropو کلاس انواع شیgreenButtonState) پاس دادن@Linkبا اجزای فرعیGreenButtonوYellowButtonهمگام سازی دو طرفه را انجام دهید. تغییر داده ها در مؤلفه فرزند با مؤلفه والد و تغییر داده ها در مؤلفه والد نیز با مؤلفه فرزند همگام می شود.
(2) نوع آرایه@Link
جزء والدParentاز@Stateآرایهarrعبور کند@Linkبا اجزای فرعیChildازitemsآرایه ها در هر دو جهت هماهنگ می شوند. اجزای فرعی می توانند عناصر آرایه را اضافه و جایگزین کنند و آنها را با مولفه اصلی همگام کنند. توجه کنید،@Linkو@Stateانواع آرایه ها باید یکسان باشند و نمی توانند باشند@Linkبه عنوان یک نوع عنصر واحد برای دریافت تعریف شده است@Stateآیتم های داده در آرایه (اگر این نیاز را دارید، لطفاً به@Propو@Observed)
(3) تزئین متغیرهای نوع نقشه (API11 و بالاتر)
جزء فرعیChildاز@Linkمتغیرvalue(نوع استMap) با مولفه والدMapSample2از@Stateمتغیرmessageهمگام سازی دو طرفه را انجام دهید. عملیات مختلفی را می توان بر روی Map در مؤلفه فرزند انجام داد (مانند مقداردهی اولیه، تنظیم مقادیر جدید، پاک کردن، جایگزینی و حذف عناصر و غیره)، نمای مطابق با آن به روز می شود و عملیات با مؤلفه والد همگام می شود.
(4) متغیرهای نوع مجموعه تزئینی (API11 و بالاتر)
جزء فرعیChildاز@Linkمتغیرmessage(تایپ کنیدSet) با مولفه والدSetSample1از@Stateمتغیرmessageهمگام سازی دو طرفه را انجام دهید. عملیات مؤلفه فرزند در مجموعه (مانند مقداردهی اولیه، افزودن عناصر، پاک کردن، حذف عناصر و غیره) با مؤلفه والد همگام خواهد شد بر این اساس تازه شده است.
(5) از مکانیسم همگام سازی دو طرفه برای تغییر سایر متغیرهای محلی استفاده کنید
عبور کند@Watchدکوراتور، در جزء فرعیChildوسط@LinkمتغیرsourceNumberهنگامی که تغییر می کند، می توانید محلی را تغییر دهید@StateمتغیرmemberMessage، برای دستیابی به همگام سازی متغیرها بین مؤلفه های والد و فرزند، اما تغییرات محلیmemberMessageبر متغیرها در مؤلفه های والد تأثیر نمی گذارد.
(شش)Linkاز نمونه های نوع اتحادیه پشتیبانی می کند
جزء والدIndexاز@Stateمتغیرname(نوع استstring | undefined) پاس دادن@Linkبا اجزای فرعیChildازnameمتغیرها در هر دو جهت هماهنگ می شوند. تغییر در مؤلفه والد یا فرزندnameویژگی ها یا انواع، طرف مقابل بر این اساس تجدید می شود.
6. مشکلات و راه حل های مشترک
(یک)@Linkخطای نوع متغیر حالت دکوراسیون
در جزء فرعی@Linkمتغیر تزئین شده باید دقیقاً از نوع منبع داده باشد و منبع داده نیز باید باشد@Stateمتغیرهای حالت تزئین شده توسط دکوراتورهای دیگر. به عنوان مثال، اگر منبع داده است@StateتزئینیClassAمتغیر را در زیر مولفه تایپ کنید@Linkنیز باید به عنوان اعلام شودClassAنوع، نه نوع خواص آن.
(2) استفاده کنیدa.b(this.object)تماس فرم باعث بازخوانی UI نمی شود
چه زمانی@Linkمتغیر تزئین شده از نوع Object و in استbuildروش پاس درونa.b(this.object)هنگامی که در یک فرم فراخوانی میشود (مانند اصلاح ویژگیهای Object از طریق روشهای ثابت یا روشهای داخلی مؤلفه)، بازخوانی UI نمیتواند فعال شود. راه حل این است که ابتدا یک مقدار به متغیر اختصاص دهیم، به طوری که عملیات اصلاح با یک عامل Proxy روی متغیر عمل کند تا به رفرش UI برسد.
1. نمای کلی @link
در Hongmeng Next،@Link
دکوراتورها برای ایجاد یک رابطه همگام سازی دو طرفه داده بین اجزای والد و فرزند استفاده می شوند. این بدان معناست که جزء فرزند است@Link
متغیرهای تزئین شده و منابع داده مربوط به آنها در مؤلفه های والد می توانند داده ها را با یکدیگر همگام کنند. از API نسخه 9 این دکوراتور برای استفاده در کارت های ArkTS و از API نسخه 11 برای استفاده در خدمات متا پشتیبانی می شود.
(1) مکانیسم همگام سازی
- منبع داده در جزء والد (مانند
@State
،@StorageLink
و@Link
) با اجزای فرعی@Link
اجرای همگام سازی دو طرفه داده بین متغیرهای تزئین شده. - تغییرات دادههای هر دو طرف در زمان واقعی با طرف دیگر همگامسازی میشوند.
(2) محدودیت ها
@Link
دکوراتورها نمی توانند وارد شوند@Entry
در اجزای سفارشی تزئین شده استفاده می شود.
2. قوانین استفاده از دکوراتورها
- پارامتر: بدون پارامتر
- نوع همگام سازی: همگام سازی دو طرفه.
-
انواع متغیر که مجاز به تزئین هستند
- شی، کلاس، رشته، عدد، بولی، انواع enum و آرایه های آنها.
- نوع تاریخ پشتیبانی
- API11 و بالاتر از انواع Map و Set پشتیبانی می کند.
- از انواع اتحادیه Length، ResourceStr و ResourceColor که توسط چارچوب ArkUI تعریف شده است پشتیبانی می کند.
- نوع باید مشخص شود و باید همان نوع متغیر حالت محدود دو طرفه باشد. API11 و بالاتر از انواع ترکیبی پشتیبانی نمی شود (مانند رشته | عدد، رشته | تعریف نشده یا ClassA | تهی).
- هنگام استفاده از undefined و null، توصیه می شود نوع را به صراحت مشخص کنید و از بررسی نوع TypeScript پیروی کنید.
- مقدار اولیه متغیر تزئین شده: هیچ، مقداردهی اولیه محلی ممنوع است.
3. قوانین انتقال/دسترسی متغیر
-
راه اندازی و به روز رسانی از مولفه والد
- الزامی است، با جزء اصلی
@State
،@StorageLink
و@Link
یک اتصال دو طرفه ایجاد کنید. - اجازه در مؤلفه والد
@State
،@Link
،@Prop
،@Provide
،@Consume
،@ObjectLink
،@StorageLink
،@StorageProp
،@LocalStorageLink
و@LocalStorageProp
زیرمولفه مقداردهی اولیه متغیر تزئین@Link
. شروع از API نسخه 9،@Link
مؤلفه فرزند از مؤلفه والد مقداردهی اولیه شد@State
نحو Comp({ aLink: this.aState }) است و Comp({aLink: $aState}) نیز پشتیبانی می شود.
- الزامی است، با جزء اصلی
-
برای مقداردهی اولیه اجزای فرزند استفاده می شود: مجاز است، می تواند برای مقداردهی اولیه متغیرهای منظم استفاده شود،
@State
،@Link
،@Prop
،@Provide
. - اینکه آیا دسترسی خارج از مؤلفه پشتیبانی می شود یا خیر: خصوصی، فقط در مولفه مالک قابل دسترسی است.
4. تغییرات و عملکرد رفتاری را مشاهده کنید
(1) تغییرات را مشاهده کنید
- انواع پایه (بولی، رشته ای، عددی): تغییرات در مقادیر را می توان به صورت همزمان مشاهده کرد.
- کلاس یا نوع شی: می توانید تغییرات را در انتساب ها و انتساب های ویژگی مشاهده کنید (یعنی تمام ویژگی های بازگردانده شده توسط Object.keys(observedObject)).
- نوع آرایه: می توانید تغییراتی را در افزودن، حذف و به روز رسانی سلول های آرایه به آرایه مشاهده کنید.
- نوع تاریخ: می توانید انتساب کلی Date و عملیات به روز رسانی ویژگی ها را از طریق رابط آن مشاهده کنید.
- نوع نقشه (API11 و بالاتر): می توانید انتساب کلی نقشه و عملیات به روز رسانی مقدار را از طریق رابط آن مشاهده کنید.
- نوع تنظیم (API11 و بالاتر): شما می توانید انتساب کل مجموعه و عملیات به روز رسانی مقدار را از طریق رابط آن مشاهده کنید.
(2) رفتار چارچوب
-
رندر اولیه
- مولفه والد را اجرا کنید
build()
تابع نمونه جزء فرزند را ایجاد می کند. - باید در مولفه والد مشخص شود
@State
مقداردهی اولیه متغیر مولفه های فرعی@Link
متغیرها، این دو همگام باقی می مانند. جزء والد@State
کلاس بسته بندی متغیر حالت به زیر مولفه و زیر مولفه منتقل می شود@Link
کلاس wrapper اشاره گر خود را به جزء والد ثبت می کند@State
متغیر
- مولفه والد را اجرا کنید
-
به روز رسانی منبع داده (مولفه والد به جزء فرزند)
- جزء والد
@State
پس از تغییر متغیر، تمام اجزای سیستم و متغیرهای وابسته به آن (مانند@Link
نوع بسته بندی). - اطلاع دهد
@Link
پس از به روز رسانی کلاس بسته بندی، وابستگی های موجود در جزء فرعی@Link
اجزای سیستم متغیرهای حالت نیز برای دستیابی به همگام سازی داده های حالت از مؤلفه های والد به مؤلفه های فرزند به روز می شوند.
- جزء والد
-
@Link
به روز رسانی (جزء فرزند به جزء والد)-
@Link
پس از بهروزرسانی، با مؤلفه والد تماس بگیرید@State
بسته بندیset
روشی برای همگام سازی مقدار به روز شده به مؤلفه والد. - جزء فرعی
@Link
و جزء والد@State
به ترتیب اجزای سیستم وابسته را طی کنید، بهروزرسانیهای رابط کاربری مربوطه را انجام دهید و اجزای فرعی را پیادهسازی کنید.@Link
همگام سازی بازگشت به مؤلفه والد@State
.
-
5. نمونه هایی از سناریوهای استفاده
(1) انواع ساده و انواع شی کلاس@Link
جزء والدShufflingContainer
در@State
متغیر (نوع سادهyellowButtonProp
و کلاس انواع شیgreenButtonState
) پاس دادن@Link
با اجزای فرعیGreenButton
وYellowButton
همگام سازی دو طرفه را انجام دهید. تغییر داده ها در مؤلفه فرزند با مؤلفه والد و تغییر داده ها در مؤلفه والد نیز با مؤلفه فرزند همگام می شود.
(2) نوع آرایه@Link
جزء والدParent
از@State
آرایهarr
عبور کند@Link
با اجزای فرعیChild
ازitems
آرایه ها در هر دو جهت هماهنگ می شوند. اجزای فرعی می توانند عناصر آرایه را اضافه و جایگزین کنند و آنها را با مولفه اصلی همگام کنند. توجه کنید،@Link
و@State
انواع آرایه ها باید یکسان باشند و نمی توانند باشند@Link
به عنوان یک نوع عنصر واحد برای دریافت تعریف شده است@State
آیتم های داده در آرایه (اگر این نیاز را دارید، لطفاً به@Prop
و@Observed
)
(3) تزئین متغیرهای نوع نقشه (API11 و بالاتر)
جزء فرعیChild
از@Link
متغیرvalue
(نوع استMap
) با مولفه والدMapSample2
از@State
متغیرmessage
همگام سازی دو طرفه را انجام دهید. عملیات مختلفی را می توان بر روی Map در مؤلفه فرزند انجام داد (مانند مقداردهی اولیه، تنظیم مقادیر جدید، پاک کردن، جایگزینی و حذف عناصر و غیره)، نمای مطابق با آن به روز می شود و عملیات با مؤلفه والد همگام می شود.
(4) متغیرهای نوع مجموعه تزئینی (API11 و بالاتر)
جزء فرعیChild
از@Link
متغیرmessage
(تایپ کنیدSet
) با مولفه والدSetSample1
از@State
متغیرmessage
همگام سازی دو طرفه را انجام دهید. عملیات مؤلفه فرزند در مجموعه (مانند مقداردهی اولیه، افزودن عناصر، پاک کردن، حذف عناصر و غیره) با مؤلفه والد همگام خواهد شد بر این اساس تازه شده است.
(5) از مکانیسم همگام سازی دو طرفه برای تغییر سایر متغیرهای محلی استفاده کنید
عبور کند@Watch
دکوراتور، در جزء فرعیChild
وسط@Link
متغیرsourceNumber
هنگامی که تغییر می کند، می توانید محلی را تغییر دهید@State
متغیرmemberMessage
، برای دستیابی به همگام سازی متغیرها بین مؤلفه های والد و فرزند، اما تغییرات محلیmemberMessage
بر متغیرها در مؤلفه های والد تأثیر نمی گذارد.
(شش)Link
از نمونه های نوع اتحادیه پشتیبانی می کند
جزء والدIndex
از@State
متغیرname
(نوع استstring | undefined
) پاس دادن@Link
با اجزای فرعیChild
ازname
متغیرها در هر دو جهت هماهنگ می شوند. تغییر در مؤلفه والد یا فرزندname
ویژگی ها یا انواع، طرف مقابل بر این اساس تجدید می شود.
6. مشکلات و راه حل های مشترک
(یک)@Link
خطای نوع متغیر حالت دکوراسیون
در جزء فرعی@Link
متغیر تزئین شده باید دقیقاً از نوع منبع داده باشد و منبع داده نیز باید باشد@State
متغیرهای حالت تزئین شده توسط دکوراتورهای دیگر. به عنوان مثال، اگر منبع داده است@State
تزئینیClassA
متغیر را در زیر مولفه تایپ کنید@Link
نیز باید به عنوان اعلام شودClassA
نوع، نه نوع خواص آن.
(2) استفاده کنیدa.b(this.object)
تماس فرم باعث بازخوانی UI نمی شود
چه زمانی@Link
متغیر تزئین شده از نوع Object و in استbuild
روش پاس درونa.b(this.object)
هنگامی که در یک فرم فراخوانی میشود (مانند اصلاح ویژگیهای Object از طریق روشهای ثابت یا روشهای داخلی مؤلفه)، بازخوانی UI نمیتواند فعال شود. راه حل این است که ابتدا یک مقدار به متغیر اختصاص دهیم، به طوری که عملیات اصلاح با یک عامل Proxy روی متغیر عمل کند تا به رفرش UI برسد.