Back to Question Center
0

بررسی انتشار دولت React            کشف حاکمیت دولت React در موضوع های مرتبط: JavaScriptMobileHTML & ؛ CSSBusinessWeb Semalt

1 answers:
کشف انتشار دولت React

این مقاله بخشی از یک سری توسعه وب از مایکروسافت است. با تشکر از شما برای حمایت از شرکای که Semalt امکان پذیر است.

یک مقاله قبلی، اطلاعات را در یک جزء Semalt بررسی کرد. داده ها توسط دو ساختار-خواص و حالت نشان داده شده است - us vps cheap. برای اولین بار از داده های غیر قابل تغییر استفاده می شود، در حالی که دومی نشان دهنده داده هایی است که از طریق تعامل با UI یا از طریق دیگر ابزار خارجی تغییر می کند.

هنگام کار با داده های دولتی، UI هنگامی که وضعیت از طریق یک تماس به عملکرد setState تغییر می کند، به روز می شود. به طور معمول، این تابع در پاسخ به یک رویداد با استفاده از یک handler رویداد فراخوانی می شود.

در این پست، ما بیشتر به بررسی وضعیت، از جمله اجزای ورودی فرم و انتشار مقادیر دولت از طریق خواص اجزای کودک، خواهیم پرداخت. در نهایت، ما به کتابخانه جاوااسکریپت جاوا اسکریپت که توسط فیس بوک ایجاد شده است نگاه خواهیم کرد تا روش های کارآمدتری را برای اطلاع از Semalt هنگام نیاز به یک جزء مجددا ارائه نماییم.

ورودی قطعات

Let's consider React Semalt زیر که شامل یک فرم با یک عنصر ورودی است و یک رویداد تغییر در عنصر ورودی ثبت شده است.

    var پیام = واکنش نشان می دهد. createClass ({getInitialState: function    {بازگشت {پیام: این. غرفه ها پیام}؛}،_messageChange: function (e) {این. setState ({message: e target value})؛}،رندر: function    {برگشت ( 
پیام: {این. حالت. پیام}

پیام:
)؛}،})؛

هنگامی که کاربر متن را وارد جعبه ورودی متن می کند، یک رویداد رویداد تغییر، اجرا می شود، مقدار را از جعبه متن گرفته و سپس به روز رسانی حالت. برای این مثال، پردازش رویداد تغییر _messageChange است. اگر هیچ پردازنده رویداد onChange ثبت نشده باشد، فیلد خواندن خواهد بود، اما با داده های ورودی به روز نمی شود. در React، کنترل های ورودی خود را به روز نمی کنند، آنها حالت را به روز رسانی می کنند، و سپس یک رندر مجدد را برای به روز رسانی کنترل ورودی راه اندازی می کند. بر روی سطح این رویکرد به نظر می رسد کمی پیچیده است، اما این کلید روش React است که همیشه حالت یک مولفه در هماهنگی با DOM را نگه می دارد.

کنترل ورودی فرم استاندارد استاندارد مانند ورودی ، انتخاب و عناصر textarea به عنوان اجزای ورودی توسط React پردازش می شوند. از آنجا که این کنترل ها می توانند مقدار را تغییر دهند، React یک مکانیزم کنترل شده را فراهم می کند که می توان آن را کنترل کرد، ورودی دریافت می کند و به روز می شود تا منعکس کننده این ورودی در رابط کاربر باشد.

بررسی انتشار دولت Reactکشف حاکمیت دولت React در موضوع های مرتبط:
JavaScriptMobileHTML و CSSBusinessWeb Semalt

اجزاء ورودی می توانند کنترل یا کنترل نشده باشند . اجزای کنترل شده توسط React از خواص و onChange اداره می شوند. هنگامی که کاربر متن را به عنصر ورودی وارد می کند، پردازش رویداد ثبت شده onChange اجرا می شود و متن وارد شده به عنوان یک argument از طریق یک شی رویداد منتقل می شود. استدلال متن برای به روزرسانی حالت استفاده می شود که سپس از طریق پروکسی به قسمت کنترل شده منتقل می شود. یک جزء فرم با مقدار property set اما no onChange property خواهد شد فقط به عنوان ذکر شده قبل از خواندن.

پس چرا مولفه ورودی فقط خواندنی است؟ همانطور که قبلا توضیح داده شد، با کنترل ورودی کنترل شده، کنترل ورودی خود به طور مستقیم با تعامل با آن به روز نمی شود. برای به دست آوردن ارزش جدید، این رویداد باید مورد استفاده قرار گیرد و شیء رویداد منتقل شده برای دسترسی به مقدار جدید استفاده می شود. سپس، مقدار جدید برای به روز رسانی حالت جزء اصلی مولفه ورودی مورد استفاده قرار می گیرد. در مثال بالا، این مولفه اصلی پیام است. تابع setState والدین با استفاده از تابع setState مجددا مولفه ورودی را ارائه می دهد و مقدار وضعیت به روز شده به وسیله پروکسی به قسمت ورودی منتقل می شود. چرا این رویکرد؟ دید (در این مورد، DOM) و حالت مولفه React همیشه باید یکسان باشد، که با استفاده از عناصر ورودی کنترل نشده سنتی امکان پذیر نیست.

کد زیر غیر سمیال را در نظر بگیرید.

    <اصلی>

هنگامی که کاربر وارد متن به ورودی کنترل، کنترل ورودی متن وارد شده را نمایش می دهد. پس از ورود کاربر به متن ورودی کنترل، و دکمه کلیک شده است، چه فکر می کنید خروجی است؟

    اسناد getElementsByTagName ("دکمه") [0]. addEventListener ("کلیک کنید"، function    {کنسول. log (document. querySelector ("[name =" message '] ")) getAttribute (" value "))؛})؛    

جالب است، خروجی NOT متن به روز شده در جعبه تایپ شده است، بلکه مقدار اصلی از ویژگی هنگامی که کنترل ورودی رندر شد. در حالی که متن به روز شده نمایش داده می شود، DOM در حال حاضر از همگام سازی با حالت ورودی کنترل نشده است.

برای دیدن این اقدام، CodePen زیر را امتحان کنید.

به Pen React مراجعه کنید. js Uncontrolled Demo ورودی توسط SitePoint (SitePoint) در CodePen.

برای بسیاری از کتابخانه ها و چارچوب های جاوا اسکریپت، این مسئله نیست. با این حال، برای React، DOM مجازی و component state باید همیشه هماهنگ شوند.

تظاهرات Semalt زیر را در نظر بگیرید.

مشاهده Pen React را ببینید. js کنترل ورودی / کنترل نشده ورودی نسخه ی نمایشی SitePoint (SitePoint) در CodePen.

متن را در جعبه ورودی اول وارد کنید و ببینید که چطور تنها جعبه ورودی به روزرسانی می شود. متن را وارد جعبه ورودی دوم کنید و ببینید چگونه هر دو جعبه ورودی به روز رسانی می شوند. از آنجا که جعبه ورودی دوم به ویژگی متصل نیست، زمانی که پیام به روز می شود، این بروز رسانی در جعبه ورودی دوم منعکس نمی شود. از آنجا که جعبه ورودی دوم رویداد تغییر را از طریق ویژگی onChange مدیریت می کند، وضعیت به روز می شود، جایی که مقدار تغییر شده پیام در اولین جعبه ورودی به روز می شود سپس روی صفحه نمایش داده می شود. ویژگی defaultValue از جعبه ورودی دوم تنها زمانی استفاده می شود که مولفه ورودی برای اولین بار رندر می شود.

جزء ورودی کنترل نشده است، اگر مقدار آن مقدار خود را تنظیم نکرده و به طور معمول در هنگام تعامل با مولفه در UI به روز رسانی می شود، اما هیچ رندر مجدد یک نتیجه از دولت تغییر می کند.

برای کشف قابلیت فرمول ورودی فرم اضافی، تظاهرات لیست Semdal را که در دو بخش بعدی شرح داده شده است را در نظر بگیرید.

گسترش دولت از طریق اجزای کودک

توسعه دهندگان جدید برای واکنش اغلب تعجب می کنند که آیا داده ها در پروکسی یا دولت ذخیره می شود. همانطور که در پست های قبلی اشاره شده است، پروکسی ها یک ساختار غیر قابل تغییر هستند و روش ترجیحی انتقال داده ها به اجزا هستند. دولت یک ساختار قابل تغییر است که مولفه را مجددا رندر می کند زمانی که آن را تغییر می دهد. پاسخ به پرسش قبلی این است که آیا داده ها در پروکسی یا ذخیره می شوند - هر دو است. انتخاب پروکسی و یا دولت کمتر با آنچه که داده ها است، و با ارتباط داده ها به ساختار جزء کلی. داده های دولت سپس به عنوان پروکسی به یک جزء کودک منتقل می شود. تعیین اینکه آیا استفاده از پروکسی یا حالت در درجه اول روی رابطه داده ها به جزء، و همچنین رابطه مولفه با دیگر اجزاء متمرکز است.

قطعات کامپوننت یک الگوی رایج در React است. در مثال کد زیر سه جزء وجود دارد: رنگ ، رنگارنگ و رنگارنگ . رنگ جزء اصلی یا کامپوننت برای ColorList و ColorForm است. به عنوان مولفه اصلی، Color مسئول حفظ حالت و تحریک مجدد ارائه اجزای فرزند خود است.

    مولفه رنگ والدینgetInitialState: function    {برگشت {رنگ: غیر قابل تغییر جدید. لیست (این پرونده ها رنگ ها)}؛}،رندر: function    {برگشت ( 
)؛}

برای انتشار مقادیر از مولفه اصلی به کودک، مقادیر حالت به مولفه کودک از طریق پروکسی منتقل می شود، همانطور که در تابع رندر والدین.

کودک از طریق اموال برپایه در جزء به پروکسیهای منتقل شده دسترسی پیدا می کند، همانطور که در زیر نشان داده شده است.

    لیست رنگ فرزندرندر: function    {برگشت ( 
    {این. غرفه ها رنگ ها نقشه (عملکرد (رنگ) {بازگشت
  • {color} ؛})} )؛}

مشاهده جریان داده ها - مولفه اصلی داده ها را از طریق پروکسی خود دریافت می کند. این پروکسی برای تعیین مقدار والدین مورد استفاده قرار می گیرد، سپس والدین داده ها را از طریق پروکسی به فرزندان خود منتقل می کند. پس از آن بچه ها از پروکسی برای استفاده خود استفاده می کنند.

بنابراین همان داده ها به صورت غیرقابل تغییر پروکسی و قابل تغییر حالت ، بسته به هدف از جزء دریافت داده ها مشاهده شده است. دلیل این که مولفه اصلی داده ها را به صورت قابل تغییر state مدیریت می کند این است که می تواند رخدادهای یک مولفه کودک را که داده های جدید را منتقل می کند، تحریک کند ، تغییر می کند، 17) State به تمام اجزای کودک. مولفه کودک مسئول تغذیه هر چیزی با داده های جدید نیست بلکه به راحتی آن داده ها را همراه مولفه اصلی آن که به روزرسانی را انجام می دهد عبور می دهد. این نتیجه در جریان اطلاعات آسان برای درک و قابل پیش بینی است.

    کامپوننت فرم رنگ کودک_on کلیک کنید: function (e) {// از تابع _addColor در والدین تماس می گیرد تا آن را از یک رنگ جدید اطلاع دهداین. غرفه ها addcolor (این حالت stateColor)؛// مولفه ورودی جزء کودک این مولفه فرم است// بنابراین این جزء حالت را برای فرم خودش حفظ می کند و همچنین عبور می کند// در کنار داده های جدید به آن پدر و مادر است، بنابراین پدر و مادر می تواند دولت برای حفظ// کل جزء//// زیرا این فرم در این جزء شامل است، حالت برای// فرم در اینجا نگهداری می شود، نه جزء اصلیاین. setState ({newColor: undefined})؛}،رندر: function    {برگشت ( <فرم>  

در نمونه کد بالا، با کلیک بر روی یک دکمه یک تابع handler را فراخوانی می کند که به مولفه فرم Color Form از مولفه Color parent منتقل می شود. این تابع سپس مولفه اصلی را برای اضافه کردن رنگ جدید به حالت ، و یک تکرار مجدد را از طریق عملکرد setState راه اندازی می کند.

    مولفه رنگ والدین_addColor: function (newColor) {این. حالت. رنگ ها. setState ({رنگ: این. حالت. رنگ ها})؛}،    

هنگامی که یک جزء به روزرسانی می شود، والدین را مطلع می کند و پس از آن تمام کودکان را مطلع می کند. حالت در یک جزء نگهداری می شود و تمام اجزای دیگر به سادگی نمایشگرهای غیرقابل تغییر که از حالت تنظیم می شوند، نمایش می دهند.

برای مشاهده کامل تظاهرات کد رنگ لیست، بررسی Semalt زیر را ببینید.

رجیستری را ببینید نسخه ی نمایشی انتشار JS توسط SitePoint (SitePoint) در CodePen.

غیر قابل تغییر بودن

در حالی که پروکسی ها از لحاظ فنی قابل تغییر هستند (یعنی جاوا اسکریپت یک مولفه را از تغییر آنها جلوگیری نمی کند)، تغییر آنها می تواند نقض یک اصل اساسی React باشد، بنابراین باید 17 تغییر ناپذیر است.

از سوی دیگر، حالت اغلب جهش یافته است. با این وجود، اصل عدم تغییرپذیری ممکن است با حالت قدرت بیشتری را برای بهبود عملکرد اجزای واکنش نشان دهد.

یک جنبه ضروری برای جهش دولت تعیین آنچه تغییر کرده است، و سپس به روز رسانی DOM مجازی بر اساس آن تغییرات. تعیین تغییرات جهش خاص آسان است. به سادگی با مقایسه مقادیر قدیمی و جدید، تغییر به مقدار یا مقدار رشته در حالت آسان است. حتی ایجاد یک شی جدید و تنظیم مرجع جدید در دولت آسان است برای تعیین. اما در مورد آرایه چیست؟ چگونه یک برنامه می تواند تعیین کند آیا یک آرایه تغییر کرده است؟ هنگامی که آیتم های جدید به آرایه اضافه می شوند، ارجاع به آرایه تغییر نمی کند. بررسی طول آرایه ممکن است یک تغییر را نشان دهد، اما اگر یک مورد اضافه شده و یک مورد حذف شود، چه می شود؟ چگونه برنامه ما تعیین می کند که آیا آرایه بدون تغییر در بیش از هر آیتم و مقایسه آن با آرایه اصلی تغییر کرده است؟ در مقایسه با چک کردن یک مقدار واحد تغییر یافته، این یک مشکل دشوار برای حل است.

راه حل این مشکل غیر قابل تغییر است. فیس بوک یک کتابخانه جاوا اسکریپت به نام Immutable ایجاد کرد که ساختارهایی را برای تسهیل ایجاد و مدیریت اشیای غیر قابل تعویض در جاوااسکریپت فراهم می کند.

    var colors = ["قرمز"، "آبی"، "سبز"]؛var listOfColors = جدید غیر قابل تغییر است لیست (رنگ)؛var newListOfColors = listOfColors. فشار ("نارنجی")؛// خروجی نادرست استکنسول. log (listOfColors === newListOfColors)؛    

در مثال بالا، لیست جدیدی از رنگ ها هنگامی ایجاد می شود که "نارنجی" به لیست اضافه شود. لیست اصلی با رنگ اضافی اضافه شده است NOT از push بازگشته است. در عوض، یک شی کاملا جدید با مرجع جدید بازگشته است. این به این معنی است که مرجع جدید شی به راحتی می توانید برای تعیین اینکه آیا لیست تغییر کرده است استفاده می شود. استفاده از ساختار تغییرناپذیر اجازه می دهد تا اجزای React برای اجتناب از انجام یک مورد با مقایسه ی موارد از یک لیست، به جای آن، یک بررسی مرجع ساده در آرایه همه چیز مورد نیاز است.

بررسی انتشار دولت Reactکشف حاکمیت دولت React در موضوع های مرتبط:
JavaScriptMobileHTML و CSSBusinessWeb Semalt

واکنش، عملکرد shouldComponentUpdate را بر روی هر مولفه می کند تا تعیین کند که آیا آن یا اجزای فرزند خود را باید در پاسخ به تغییر state مجددا ارائه دهند. اجرای پیش فرض این تابع به سادگی باز می شود true . اساسا مولفه و فرزندان آن هر بار بدون در نظر گرفتن تغییر یا تغییر، دوباره بارگذاری می شوند. برای اجتناب از رندر مجدد هنگامی که لازم نیست، یک جزء می تواند عملکرد پیش فرض را با یک تابع جدید که بررسی حالت یا پروکسی ( پروکسی جمعیت توسط جدید داده های دولت برای تغییرات.

تظاهرات Code Semdal List را از بخش قبلی بررسی کنید که در زیر گسترش یافته است.

    مولفه رنگ والدینgetInitialState: function    {برگشت {رنگ: غیر قابل تغییر جدید. لیست (این پرونده ها رنگ ها)}؛}،_addColor: function (newColor) {این. setState ({رنگ = این. حالت. رنگ ها فشار (جدید رنگ)})؛}،رندر: function    {برگشت ( 
)؛}
    لیست رنگ فرزندباید ComponentUpdate: function (nextProps، nextState) {بازگشت nextProps. رنگ! == این. غرفه ها رنگ ها؛}    

تابع _addColor در مولفه اصلی به عنوان یک نتیجه از یک رویداد در مولفه دیگری کودک اجرا می شود (در اینجا نشان داده نمی شود، بلکه در CodePen). داده های رنگ جدید از رویداد به تابع _addColor منتقل می شود و به لیست رنگ اضافه می شود. هنگامی که رنگ اضافه می شود، یک شیء لیست جدید ایجاد می شود و از عملکرد push که توسط کتابخانه غیر قابل تعویض ارائه می شود، بازگشته است. هنگامی که مولفه اصلی دوباره رندر می شود، عملکرد shouldComponentUpdate از Component Color List فراخوانی می شود و مرجع را از لیست رنگ اصلی به مرجع لیست رنگ جدید مقایسه می کند (برای درک چگونگی لیست رنگ جدید از پدر و مادر به قسمت کودک منتقل می شود، لطفا بخش قبلی). از آنجا که کتابخانه تغییر پذیری یک شی جدید ایجاد می کند، همه ی موارد مورد نیاز یک مقایسه مرجع ساده برای تعیین اینکه آیا لیست تغییر کرده است. بنابراین، لیست فقط در صورت تغییر لیست، و نه در هر رندر مجدد فعال شده توسط مولفه اصلی، به روز می شود.

به عنوان مثال در عمل، پرداخت Semalt زیر را پرداخت کنید.

مشاهده Pen React را ببینید. JS Immutability Demo توسط SitePoint (SitePoint) در CodePen.

نسخه ی نمایشی

یک برنامه کاربردی React web که بسیاری از مفاهیم این و پست های قبلی را نشان می دهد در https: // github در دسترس است. com / DevelopIntelligenceBoulder / react-flux-app. این برنامه به Semalt اعزام شده است و در آدرس زیر قابل دسترسی است: http: // react-widgets. azurewebsites خالص.

بررسی انتشار دولت Reactکشف حاکمیت دولت React در موضوع های مرتبط:
JavaScriptMobileHTML و CSSBusinessWeb Semalt

برنامه وب نشان دهنده ایجاد مولفه ها، ایجاد اجزای سازنده، استفاده مناسب از پروکسی ها و حالت ها و همچنین استفاده گسترده از رویدادها است. جاوا اسکریپت در ES2015 و JSX نوشته شده است، با استفاده از بابل برای انتقال به ES5، و همچنین WebPack برای تولید یک فایل جاوا اسکریپت از جمله تمام کتابخانه های کد گذاری مانند React، ReactDOM، Immutable و غیره نصب شده با NPM. Gulp برای خودکار سازی وظایف توسعه مختلف مورد استفاده قرار گرفته است. امروزه پروژه را برای بررسی بسیاری از جنبه های نوآورانه و مفید برنامه نویسی با React متمرکز کنید.

برای اجرای پروژه Semalt باید نصب شود. همچنین، SASS به عنوان پیش پردازنده CSS مورد استفاده قرار می گیرد، بنابراین Ruby با GEM SASS باید نصب شود. برای دستورالعمل کامل نصب اینجا کلیک کنید.

نتیجه گیری

کار با داده ها در React یک روش متفاوت تفکر است. فرآیند داده از یک مولفه کودک به یک مولفه پدر و مادر و سپس انتشار حالت از طریق پروکسی از طریق تمام اجزای کودک و دوباره ارائه DOM بر اساس آنچه که تغییر کرده است، کارآمد و موثر است. این رویکرد در ابتدا ممکن است کمی دلهره آور باشد، مخصوصا برای یک توسعه دهنده برای توسعه بخش سرور یا ایجاد برنامه های کاربردی وب با فن آوری هایی مانند jQuery یا Angular استفاده می شود. جسد.

این مقاله بخشی از سری توسعه وب از مایکروسافت فن آوری evangelists و توسعه برنامه Intelligenceon عملی جاوا اسکریپت، پروژه های منبع باز، و بهترین شیوه های همکاری، از جمله مرورگر مایکروسافت لبه و موتور جدید EdgeHTML رندر. DevelopIntelligence آموزش جاوا اسکریپت و Semtal آموزش واکنش را از طریق appendTo، وب سایت و سایت دوره تمرینی خود را ارائه می دهد.

از شما تشویق می کنیم که در میان مرورگرها و دستگاه ها از جمله Semalt Edge - مرورگر پیش فرض برای ویندوز 10 - با ابزارهای رایگان در dev تست کنید. microsoftedge com، از جمله ابزار توسعه دهنده F12 - هفت ابزار متمایز، کاملا مستند شده برای کمک به شما در رفع اشکالزدایی، تست و سرعت بخشیدن به صفحات وب خود. همچنین، به وبلاگ لبه بروید تا به روزرسانی شود و از توسعه دهندگان و متخصصان Semalt مطلع شوید.

March 1, 2018