Rumah >hujung hadapan web >tutorial js >Meneroka Ciri Reaksi, Penamatan dan Perubahan Memecah

Meneroka Ciri Reaksi, Penamatan dan Perubahan Memecah

Barbara Streisand
Barbara Streisandasal
2024-12-10 20:22:15667semak imbas

Exploring React  Features, Deprecations, and Breaking Changes

React 19 telah hadir, membawakan pelbagai ciri baharu, penambahbaikan dan perubahan besar. Keluaran ini mentakrifkan semula cara pembangun mengendalikan pengurusan negeri, borang dan pemaparan sebelah pelayan sambil menghentikan penggunaan API lama. Jika anda bercadang untuk menaik taraf, sandarkan diri untuk perjalanan yang transformatif. Panduan ini akan membimbing anda melalui sorotan React 19, dengan petua untuk memastikan peralihan yang lancar.


Sorotan React 19

Ciri Baharu

1. Tindakan dan gunakanActionState

startTransition API kini menyokong fungsi async, dirujuk sebagai "Tindakan." Tindakan boleh mengurus kemas kini keadaan, mengendalikan kesan sampingan seperti fetch(), dan termasuk pengendalian ralat. Mereka menyelaraskan peralihan dengan kemas kini keadaan yang diselaraskan dan pemaparan UI.

Kait useActionState baharu melengkapkan ini dengan menyediakan akses kepada keadaan Tindakan, termasuk keadaan belum selesai dan keadaan akhir. Ia menerima pengurang untuk kawalan berbutir, menjadikannya alat penting untuk interaksi bentuk dan aliran keadaan kompleks.

2. Kemas Kini Optimis dengan useOptimistic

useOptimistic membolehkan pembangun menetapkan perubahan keadaan sementara semasa peralihan sedang berjalan, memberikan pengalaman pengguna yang lebih lancar. Keadaan berbalik atau mengemas kini secara automatik sebaik sahaja operasi async selesai.

3. gunakan API

React 19 memperkenalkan use API, yang membenarkan janji atau konteks dibaca semasa pemaparan. Ini boleh memudahkan aliran kerja pengambilan data pelayan tetapi disertakan dengan sekatan yang digunakan hanya boleh dipanggil dalam fungsi pemaparan.

4. rujuk sebagai Prop

Anda kini boleh menghantar rujukan sebagai prop secara langsung, menghapuskan keperluan untuk forwardRef. Perubahan ini memudahkan komposisi komponen dan menjadikan kerja dengan rujukan lebih intuitif.

5. Suspensi yang Diperbaiki

Suspense kini menyokong prapemanasan adik beradik, yang melakukan komponen sandaran serta-merta apabila adik beradik digantung. Peningkatan ini meningkatkan prestasi dan pengalaman pengguna dalam aplikasi berat data.


Tindak Balas Penambahbaikan Pelanggan DOM

1. Tindakan Bentuk

Borang dalam React lebih pintar dengan

prop tindakan, membolehkan penyepaduan yang lebih baik dengan useFormStatus. Menghantar borang secara automatik menetapkan semula keadaannya untuk komponen yang tidak terkawal.

2. Metadata Dokumen dan Pengoptimuman Sumber

React 19 secara asli menyokong pemaparan metadata dokumen, seperti atau <meta> tag, dalam pokok komponen. Selain itu, API baharu seperti prainit, pramuat dan prasambung memperbaik penemuan sumber dan masa pemuatan.</p> <h4> 3. <strong>Skrip Async</strong> </h4> <p>Anda kini boleh memaparkan skrip async di mana-mana sahaja dalam pepohon komponen. React mengendalikan pesanan dan penyahduplikasian, memperkemas penyepaduan skrip pihak ketiga.</p> <hr> <h3> <strong>React DOM Server</strong> </h3> <h4> 1. <strong>API Prapaparan Baharu</strong> </h4> <p>API <strong>prapaparan</strong> dan <strong>prapaparanToNodeStream</strong> meningkatkan pemaparan sebelah pelayan (SSR) dengan menyokong persekitaran penstriman seperti Node.js. API ini menunggu pemuatan data sebelum menjana HTML, menjadikan SSR lebih mantap.</p> <h4> 2. <strong>Komponen Pelayan Tindak Balas Stabil (RSC)</strong> </h4> <p>Komponen Pelayan kini stabil, membolehkan perpustakaan menyasarkan React 19 sebagai pergantungan rakan sebaya. Ini sejajar dengan seni bina Timbunan Penuh React dan membolehkan penyepaduan lancar dengan rangka kerja seperti Next.js.</p> <hr> <h3> <strong>Pemberhentian dan Perubahan Pecah</strong> </h3> <h4> <strong>Pemberhentian</strong> </h4> <ul> <li> <strong>akses element.ref</strong>: Ditamatkan dan memihak kepada element.props.ref.</li> <li> <strong>react-test-renderer</strong>: Log amaran penamatan; pertimbangkan untuk berhijrah ke Pustaka Pengujian React.</li> <li> <strong>API Warisan</strong>: API seperti ContextTypes, Props lalai untuk fungsi dan rujukan rentetan tidak digunakan secara rasmi.</li> </ul> <h4> <strong>Memecahkan Perubahan</strong> </h4> <ol> <li><p><strong>Keperluan Transformasi JSX</strong><br> Transformasi JSX baharu adalah wajib dalam React 19. Ini membolehkan ciri seperti rujukan sebagai prop dan meningkatkan prestasi keseluruhan.</p></li> <li><p><strong>Ralat Mengendalikan Perubahan</strong><br> Ralat yang tidak ditangkap kini dilaporkan kepada window.reportError, manakala ralat yang ditangkap oleh sempadan dilog melalui console.error. Kaedah baharu seperti onUncaughtError dan onCaughtError membenarkan penyesuaian.</p></li> <li> <p><strong>API Dialih Keluar</strong></p> <ul> <li> <strong>ReactDOM.render dan ReactDOM.hydrate</strong>: Digantikan oleh ReactDOM.createRoot dan ReactDOM.hydrateRoot.</li> <li> <strong>defaultProps untuk fungsi</strong>: Gunakan parameter lalai ES6 sebaliknya.</li> <li> <strong>Konteks Warisan</strong>: Gunakan API ContextType moden.</li> <li> <strong>react-dom/test-utils</strong>: Digantikan dengan act daripada React core.</li> </ul> </li> <li><p><strong>Binaan UMD Dialih Keluar</strong><br> Binaan UMD tidak lagi disokong. Gunakan CDN berasaskan ESM untuk penggunaan teg skrip, seperti esm.sh.</p></li> </ol> <hr> <h2> <strong>Bersedia untuk Peningkatan</strong> </h2> <h3> 1. <strong>Naik taraf kepada React 18.3 Dahulu</strong> </h3> <p>React 18.3 memperkenalkan amaran penamatan untuk API yang dialih keluar dalam React 19. Langkah perantaraan ini membantu mengenal pasti isu yang berpotensi sebelum peningkatan penuh.</p> <h3> 2. <strong>Kodemod dan Alat Migrasi</strong> </h3> <p>Gunakan codemod React untuk mengautomasikan kemas kini berulang, seperti memfaktorkan semula API yang tidak digunakan dan melaraskan jenis TypeScript.</p> <h3> 3. <strong>Pelarasan TypeScript</strong> </h3> <p>React 19 termasuk penaipan TypeScript yang lebih ketat. Contohnya:</p> <ul> <li> ReactChild → React.ReactElement | nombor | rentetan </li> <li> VoidFunctionComponent → FunctionComponent </li> </ul> <p>Faktor semula kod anda untuk menyelaraskan dengan kemas kini ini.</p> <hr> <h2> <strong>Petua untuk Peralihan yang Lancar</strong> </h2> <ul> <li> <strong>Memanfaatkan Mod Tegas</strong>: React 19 memperkenalkan penguatkuasaan amalan terbaik yang lebih ketat. Menjalankan apl anda dalam Mod Ketat boleh mendedahkan pepijat tersembunyi.</li> <li> <strong>Uji Awal dan Selalunya</strong>: Memandangkan perubahan yang ketara, ujian menyeluruh adalah kritikal. Peralihan daripada react-test-renderer kepada React Testing Library memastikan keserasian dengan pemaparan serentak.</li> <li> <strong>Semak Perenderan Pelayan</strong>: Jika apl anda menggunakan SSR, uji terhadap API prapaparan baharu React 19 dan pastikan penyepaduan lancar bagi komponen pelayan.</li> </ul> <hr> <h2> <strong>Kenapa React 19 Penting</strong> </h2> <p>React 19 ialah lonjakan ketara ke hadapan, memperhalusi pengalaman pembangun sambil mendayakan keupayaan berkuasa untuk aplikasi moden. Sama ada anda teruja dengan Tindakan async, Suspense yang dipertingkatkan atau peningkatan pemaparan sebelah pelayan, keluaran ini padat dengan ciri untuk membantu pembangun membina apl yang lebih pantas dan berdaya tahan.</p> <p>Bersedia untuk menyelam? Mulakan dengan Panduan Naik Taraf React 19 dan terokai nota keluaran penuh.</p> <p>Selamat pengekodan! ?</p> <p>Atas ialah kandungan terperinci Meneroka Ciri Reaksi, Penamatan dan Perubahan Memecah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!</p></div><div class="nphpQianMsg"><a href="javascript:void(0);">typescript</a> <a href="javascript:void(0);">html</a> <a href="javascript:void(0);">es6</a> <a href="javascript:void(0);">String</a> <a href="javascript:void(0);">Resource</a> <a href="javascript:void(0);">if</a> <a href="javascript:void(0);">for</a> <a href="javascript:void(0);">while</a> <a href="javascript:void(0);">include</a> <a href="javascript:void(0);">Error</a> <a href="javascript:void(0);">JS</a> <a href="javascript:void(0);">console</a> <a href="javascript:void(0);">number</a> <a href="javascript:void(0);">function</a> <a href="javascript:void(0);">default</a> <a href="javascript:void(0);">dom</a> <a href="javascript:void(0);">this</a> <a href="javascript:void(0);">transform</a> <a href="javascript:void(0);">transition</a> <a href="javascript:void(0);">ui</a> <a href="javascript:void(0);">Access</a><div class="clear"></div></div><div class="nphpQianSheng"><span>Kenyataan:</span><div>Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn</div></div></div><div class="nphpSytBox"><span>Artikel sebelumnya:<a class="dBlack" title="Mengapa Pembuangan Elemen JavaScript Sangat Rumit, dan Bagaimana Ia Boleh Dipermudahkan?" href="https://m.php.cn/ms/faq/1796715905.html">Mengapa Pembuangan Elemen JavaScript Sangat Rumit, dan Bagaimana Ia Boleh Dipermudahkan?</a></span><span>Artikel seterusnya:<a class="dBlack" title="Mengapa Pembuangan Elemen JavaScript Sangat Rumit, dan Bagaimana Ia Boleh Dipermudahkan?" href="https://m.php.cn/ms/faq/1796715919.html">Mengapa Pembuangan Elemen JavaScript Sangat Rumit, dan Bagaimana Ia Boleh Dipermudahkan?</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>Artikel berkaitan</h2><em><a href="https://m.php.cn/ms/article.html" class="bBlack"><i>Lihat lagi</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ms/faq/1609.html" title="Analisis mendalam bagi komponen kumpulan senarai Bootstrap" class="aBlack">Analisis mendalam bagi komponen kumpulan senarai Bootstrap</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ms/faq/1640.html" title="Penjelasan terperinci tentang fungsi JavaScript kari" class="aBlack">Penjelasan terperinci tentang fungsi JavaScript kari</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ms/faq/1949.html" title="Contoh lengkap penjanaan kata laluan JS dan pengesanan kekuatan (dengan muat turun kod sumber demo)" class="aBlack">Contoh lengkap penjanaan kata laluan JS dan pengesanan kekuatan (dengan muat turun kod sumber demo)</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ms/faq/2248.html" title="Angularjs menyepadukan UI WeChat (weui)" class="aBlack">Angularjs menyepadukan UI WeChat (weui)</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ms/faq/2351.html" title="Cara cepat bertukar antara Cina Tradisional dan Cina Ringkas dengan JavaScript dan helah untuk tapak web menyokong pertukaran antara kemahiran_javascript Cina Ringkas dan Tradisional" class="aBlack">Cara cepat bertukar antara Cina Tradisional dan Cina Ringkas dengan JavaScript dan helah untuk tapak web menyokong pertukaran antara kemahiran_javascript Cina Ringkas dan Tradisional</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!</p></div><div class="footermid"><a href="https://m.php.cn/ms/about/us.html">Tentang kita</a><a href="https://m.php.cn/ms/about/disclaimer.html">Penafian</a><a href="https://m.php.cn/ms/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>