React Labs: நாங்கள் செய்து கொண்டிருப்பவை – February 2024
February 15, 2024 by Joseph Savona, Ricky Hanlon, Andrew Clark, Matt Carroll, and Dan Abramov.
React Labs posts-இல், active research மற்றும் development-இல் உள்ள projects பற்றி எழுதுகிறோம். எங்கள் கடைசி update-க்கு பிறகு குறிப்பிடத்தக்க முன்னேற்றம் செய்துள்ளோம்; எங்கள் முன்னேற்றத்தை பகிர விரும்புகிறோம்.
React Compiler
React Compiler இனி research project அல்ல: compiler இப்போது production-இல் instagram.com-ஐ இயக்குகிறது; மேலும் Meta-வில் கூடுதல் surfaces முழுவதும் compiler-ஐ ship செய்யவும் முதல் open source release-ஐத் தயாரிக்கவும் பணியாற்றுகிறோம்.
எங்கள் முந்தைய post-இல் விவாதித்தபடி, state மாறும்போது React சில நேரங்களில் அதிகமாக re-render செய்யலாம். React-ன் ஆரம்ப நாட்களிலிருந்தே அத்தகைய cases-க்கு எங்கள் solution manual memoization ஆக இருந்தது. தற்போதைய APIs-இல், state changes-இல் React எவ்வளவு re-render செய்ய வேண்டும் என்பதை manually tune செய்ய useMemo, useCallback, மற்றும் memo APIs பயன்படுத்துவது என்று இதன் பொருள். ஆனால் manual memoization ஒரு compromise. அது code-ஐ clutter செய்கிறது, தவறாகப் பயன்படுத்த சாத்தியம், மேலும் update ஆக வைத்திருக்க கூடுதல் வேலை தேவை.
Manual memoization ஒரு நியாயமான compromise என்றாலும், அதில் நாங்கள் திருப்தியடையவில்லை. State மாறும் போது UI-யின் சரியான பகுதிகளை மட்டும் React தானாக re-render செய்ய வேண்டும், அதுவும் React-ன் core mental model-இல் compromise இல்லாமல் என்பதே எங்கள் vision. Standard JavaScript values மற்றும் idioms உடன் UI-ஐ state-ன் நேரடியான function ஆக பார்க்கும் React-ன் அணுகுமுறை, பல developers-க்கு React அணுகத்தக்கதாக இருந்ததற்கான முக்கிய காரணம் என்று நாங்கள் நம்புகிறோம். அதனால்தான் React-க்கான optimizing compiler உருவாக்க முதலீடு செய்துள்ளோம்.
JavaScript-ன் loose rules மற்றும் dynamic nature காரணமாக அதை optimize செய்வது மிகவும் சவாலானது. JavaScript-ன் rules மற்றும் “rules of React” இரண்டையும் model செய்வதன் மூலம் React Compiler code-ஐ பாதுகாப்பாக compile செய்ய முடிகிறது. உதாரணமாக, React components idempotent ஆக இருக்க வேண்டும், அதாவது அதே inputs கொடுத்தால் அதே value return செய்ய வேண்டும், மேலும் props அல்லது state values-ஐ mutate செய்யக்கூடாது. இந்த rules developers என்ன செய்ய முடியும் என்பதைக் கட்டுப்படுத்தி, compiler optimize செய்ய பாதுகாப்பான இடத்தை உருவாக்க உதவுகின்றன.
நிச்சயமாக, developers சில நேரங்களில் rules-ஐ ஓரளவு வளைப்பார்கள் என்பதை நாங்கள் புரிந்துகொள்கிறோம்; React Compiler அதிகமான code-இல் out of the box வேலை செய்ய வேண்டும் என்பதே எங்கள் இலக்கு. Code React-ன் rules-ஐ strict-ஆகப் பின்பற்றாதபோது compiler அதை detect செய்ய முயற்சிக்கும்; பாதுகாப்பான இடங்களில் code-ஐ compile செய்யும் அல்லது பாதுகாப்பாக இல்லாவிட்டால் compilation-ஐ skip செய்யும். இந்த அணுகுமுறையை validate செய்ய Meta-வின் பெரிய மற்றும் பல்வகை codebase-க்கு எதிராக test செய்கிறோம்.
தங்கள் code React-ன் rules-ஐப் பின்பற்றுகிறதா என்பதை உறுதி செய்ய ஆர்வமுள்ள developers-க்கு, Strict Mode enable செய்ய மற்றும் React-ன் ESLint plugin configure செய்ய பரிந்துரைக்கிறோம். இந்த tools உங்கள் React code-இல் subtle bugs-ஐப் பிடிக்க உதவும்; இன்று உங்கள் applications-ன் quality-ஐ மேம்படுத்தும்; React Compiler போன்ற வரவிருக்கும் features-க்கு உங்கள் applications-ஐ future-proof செய்யும். Teams இந்த rules-ஐ புரிந்து கொண்டு apply செய்து இன்னும் robust apps உருவாக்க உதவ, React-ன் rules குறித்த consolidated documentation மற்றும் எங்கள் ESLint plugin updates-லிலும் பணியாற்றுகிறோம்.
Compiler செயல்படுவதைக் காண, கடந்த fall-இல் எங்கள் talk-ஐ பார்க்கலாம். Talk நடந்த நேரத்தில், instagram.com-ன் ஒரு page-இல் React Compiler-ஐ முயற்சித்த early experimental data எங்களிடம் இருந்தது. அதன் பிறகு, instagram.com முழுவதும் compiler-ஐ production-க்கு ship செய்தோம். Meta-வில் கூடுதல் surfaces மற்றும் open source-க்கு rollout-ஐ வேகப்படுத்த எங்கள் team-ஐயும் விரிவாக்கியுள்ளோம். முன் இருக்கும் பாதையைப் பற்றி உற்சாகமாக உள்ளோம்; வரும் மாதங்களில் பகிர மேலும் விஷயங்கள் இருக்கும்.
Actions
Database mutations execute செய்து forms implement செய்ய, Server Actions மூலம் client-இலிருந்து server-க்கு data அனுப்ப solutions-ஐ ஆராய்ந்து வருகிறோம் என்று முன்பு பகிர்ந்தோம். Server Actions development-இன் போது, client-only applications-இலும் data handling support செய்ய இந்த APIs-ஐ விரிவாக்கினோம்.
இந்த விரிவான feature தொகுப்பை நேரடியாக “Actions” என்று அழைக்கிறோம். Actions, <form/> போன்ற DOM elements-க்கு function pass செய்ய அனுமதிக்கின்றன:
<form action={search}>
<input name="query" />
<button type="submit">Search</button>
</form>action function synchronous-ஆகவும் asynchronous-ஆகவும் இயங்க முடியும். Standard JavaScript பயன்படுத்தி client side-இல் அல்லது 'use server' directive உடன் server-இல் அவற்றை define செய்யலாம். Action பயன்படுத்தும் போது, data submission-ன் life cycle-ஐ React உங்களுக்காக manage செய்யும்; form action-ன் current state மற்றும் response-ஐ access செய்ய useFormStatus மற்றும் useActionState போன்ற hooks வழங்கப்படும்.
Default-ஆக, Actions ஒரு transition-க்குள் submit செய்யப்படும்; action process ஆகும் போது current page interactive-ஆக இருக்கும். Actions async functions-க்கு support தருவதால், transitions-இல் async/await பயன்படுத்தும் திறனையும் சேர்த்துள்ளோம். fetch போன்ற async request தொடங்கும் போது transition-ன் isPending state மூலம் pending UI காட்டவும், update apply ஆகும் வரை அந்த pending UI-ஐ தொடரவும் இதனால் முடியும்.
Actions-க்கு இணையாக, optimistic state updates manage செய்ய useOptimistic என்ற feature-ஐ அறிமுகப்படுத்துகிறோம். இந்த hook மூலம், final state commit ஆனதும் தானாக revert ஆகும் temporary updates-ஐ apply செய்யலாம். Actions-க்கு, submission வெற்றிகரமாக இருக்கும் என்று கருதி client-இல் data-வின் final state-ஐ optimistically set செய்து, server-இலிருந்து கிடைக்கும் data value-க்கு revert செய்ய இது அனுமதிக்கிறது. இது சாதாரண async/await பயன்படுத்தி இயங்குவதால், client-இல் fetch பயன்படுத்தினாலும் server-இலிருந்து Server Action பயன்படுத்தினாலும் ஒரேபோல் வேலை செய்கிறது.
Library authors தங்கள் சொந்த components-இல் useTransition மூலம் custom action={fn} props implement செய்யலாம். React developers-க்கு consistent experience வழங்க, component APIs design செய்யும் போது libraries Actions pattern-ஐ adopt செய்ய வேண்டும் என்பதே எங்கள் நோக்கம். உதாரணமாக, உங்கள் library <Calendar onSelect={eventHandler}> component வழங்கினால், <Calendar selectAction={action}> API-யையும் expose செய்வதை பரிசீலிக்கவும்.
முதல் கட்டத்தில் client-server data transfer-க்கான Server Actions மீது கவனம் செலுத்தினாலும், React-க்கான எங்கள் philosophy எல்லா platforms மற்றும் environments முழுவதும் ஒரே programming model வழங்குவது. சாத்தியமான போது, client-இல் feature ஒன்றை அறிமுகப்படுத்தினால் அதை server-இலும் வேலை செய்யச் செய்வதே எங்கள் நோக்கம்; அதேபோல் மாறாகவும். உங்கள் app எங்கு run ஆனாலும் வேலை செய்யும் single set of APIs உருவாக்க இந்த philosophy உதவுகிறது; பின்னர் வேறு environments-க்கு upgrade செய்வதும் மேம்படுகிறது.
Actions இப்போது Canary channel-இல் கிடைக்கின்றன; React-ன் அடுத்த release-இல் ship ஆகும்.
React Canary-யில் புதிய features
புதிய stable features-ன் design இறுதி நிலைக்கு நெருக்கமாக வந்தவுடன், stable semver version-இல் release ஆகும்முன் அவற்றை adopt செய்யும் option ஆக React Canaries-ஐ அறிமுகப்படுத்தினோம்.
Canaries என்பது React-ஐ நாங்கள் develop செய்யும் முறையில் ஏற்பட்ட மாற்றம். முன்பு features Meta-க்குள் private-ஆக research செய்து build செய்யப்பட்டன; எனவே Stable-க்கு release ஆனபோது மட்டுமே users இறுதி polished product-ஐ பார்த்தனர். Canaries மூலம், React Labs blog series-இல் பகிரும் features-ஐ finalize செய்ய community உதவியுடன் public-ஆக build செய்கிறோம். இதனால் features முழுமையாக முடிந்த பிறகு அல்லாமல், அவை finalize ஆகும் போதே அவற்றைப் பற்றி நீங்கள் விரைவாகக் கேட்கிறீர்கள்.
React Server Components, Asset Loading, Document Metadata, மற்றும் Actions அனைத்தும் React Canary-யில் வந்துள்ளன; react.dev-இல் இந்த features-க்கான docs சேர்த்துள்ளோம்:
-
Directives:
"use client"மற்றும்"use server"ஆகியவை full-stack React frameworks-க்காக வடிவமைக்கப்பட்ட bundler features. அவை இரண்டு environments இடையிலான “split points”-ஐ குறிக்கின்றன:"use client"bundler-க்கு<script>tag உருவாக்க சொல்லும் (Astro Islands போல);"use server"bundler-க்கு POST endpoint உருவாக்க சொல்லும் (tRPC Mutations போல). ஒன்றாக, client-side interactivity-யை தொடர்புடைய server-side logic உடன் compose செய்யும் reusable components எழுத இவை அனுமதிக்கின்றன. -
Document Metadata: உங்கள் component tree-இல் எங்கிருந்தும்
<title>,<meta>, மற்றும் metadata<link>tags render செய்ய built-in support சேர்த்துள்ளோம். Fully client-side code, SSR, மற்றும் RSC உட்பட எல்லா environments-லும் இவை ஒரேபோல் வேலை செய்கின்றன. React Helmet போன்ற libraries முன்னோடியாக கொண்டு வந்த features-க்கு built-in support இதனால் கிடைக்கிறது. -
Asset Loading: stylesheets, fonts, மற்றும் scripts போன்ற resources-ன் loading lifecycle உடன் Suspense-ஐ integrate செய்துள்ளோம்; இதனால்
<style>,<link>, மற்றும்<script>போன்ற elements-இலுள்ள content display செய்ய தயாரா என்பதை React தீர்மானிக்கும் போது அவற்றையும் கணக்கில் கொள்ளும். Resource எப்போது load மற்றும் initialize ஆக வேண்டும் என்பதில் அதிக control வழங்க,preloadமற்றும்preinitபோன்ற புதிய Resource Loading APIs-யையும் சேர்த்துள்ளோம். -
Actions: மேலே பகிர்ந்தபடி, client-இலிருந்து server-க்கு data அனுப்புவதை manage செய்ய Actions சேர்த்துள்ளோம்.
<form/>போன்ற elements-க்குactionசேர்க்கலாம்;useFormStatusமூலம் status-ஐ access செய்யலாம்;useActionStateமூலம் result-ஐ handle செய்யலாம்;useOptimisticமூலம் UI-ஐ optimistically update செய்யலாம்.
இந்த features அனைத்தும் ஒன்றாக வேலை செய்வதால், அவற்றை Stable channel-இல் தனித்தனியாக release செய்வது கடினம். Form states access செய்ய complementary hooks இல்லாமல் Actions release செய்தால், Actions-ன் practical usability குறையும். Server Actions integrate செய்யாமல் React Server Components அறிமுகப்படுத்தினால், server-இல் data modify செய்வது சிக்கலாகும்.
ஒரு feature தொகுப்பை Stable channel-க்கு release செய்யும் முன், அவை cohesively வேலை செய்கின்றனவா மற்றும் production-இல் பயன்படுத்த developers-க்கு தேவையான அனைத்தும் உள்ளதா என்பதை உறுதி செய்ய வேண்டும். React Canaries, இந்த features-ஐ தனித்தனியாக develop செய்து, முழு feature set முடியும் வரை stable APIs-ஐ incrementally release செய்ய அனுமதிக்கின்றன.
React Canary-யில் உள்ள தற்போதைய feature set முழுமையாக உள்ளது; release செய்ய தயாராக உள்ளது.
React-ன் அடுத்த major version
சில ஆண்டுகள் iteration-க்கு பிறகு, react@canary இப்போது react@latest-க்கு ship ஆக தயாராக உள்ளது. மேலே கூறிய புதிய features, உங்கள் app run ஆகும் எந்த environment உடனும் compatible ஆக இருந்து, production use-க்கு தேவையான அனைத்தையும் வழங்குகின்றன. Asset Loading மற்றும் Document Metadata சில apps-க்கு breaking change ஆக இருக்கலாம் என்பதால், React-ன் அடுத்த version major version ஆக இருக்கும்: React 19.
Release-க்கு தயார் செய்ய இன்னும் வேலை உள்ளது. React 19-இல், Web Components support போன்ற breaking changes தேவைப்படும் நீண்ட காலமாக கேட்டுவரப்பட்ட improvements-யையும் சேர்க்கிறோம். இப்போது எங்கள் கவனம் இந்த changes-ஐ land செய்வது, release-க்கு தயார் செய்வது, புதிய features-க்கான docs-ஐ finalize செய்வது, மேலும் சேர்க்கப்பட்டவை பற்றிய announcements publish செய்வது.
React 19-இல் உள்ள அனைத்தும், புதிய client features-ஐ எப்படி adopt செய்வது, React Server Components-க்கு support எப்படி build செய்வது பற்றிய கூடுதல் தகவலை வரும் மாதங்களில் பகிர்வோம்.
Offscreen (Activity என rename செய்யப்பட்டது).
எங்கள் கடைசி update-க்கு பிறகு, research செய்து வந்த capability-யை “Offscreen” என்பதிலிருந்து “Activity” என rename செய்துள்ளோம். “Offscreen” என்ற பெயர் app-இன் visible அல்லாத பகுதிகளுக்கே இது பொருந்தும் என்று உணர்த்தியது; ஆனால் feature-ஐ research செய்தபோது, modal-க்கு பின்னால் உள்ள content போன்ற app-இன் சில பகுதிகள் visible ஆக இருந்தும் inactive ஆக இருக்க முடியும் என்பதை உணர்ந்தோம். App-இன் சில பகுதிகளை “active” அல்லது “inactive” என்று mark செய்யும் behavior-ஐ புதிய பெயர் இன்னும் நெருக்கமாக பிரதிபலிக்கிறது.
Activity இன்னும் research-இல் உள்ளது; library developers-க்கு expose செய்யப்படும் primitives-ஐ finalize செய்வதே எங்கள் மீதமுள்ள வேலை. அதிகமாக complete ஆன features-ஐ ship செய்வதில் கவனம் செலுத்துவதால், இந்த பகுதியின் priority-ஐ குறைத்துள்ளோம்.
இந்த update-க்கு கூடுதலாக, எங்கள் team conferences-இல் present செய்து, podcasts-இல் பங்கேற்று எங்கள் பணியைப் பற்றி மேலும் பேசவும் கேள்விகளுக்கு பதிலளிக்கவும் செய்துள்ளது.
-
Sathya Gunasekaran React India conference-இல் React Compiler பற்றி பேசினார்
-
Dan Abramov RemixConf-இல் “React from Another Dimension” என்ற talk வழங்கினார்; React Server Components மற்றும் Actions எப்படி உருவாகியிருக்கலாம் என்ற alternative history-யை அது ஆராய்கிறது
-
Dan Abramov React Server Components பற்றி Changelog-ன் JS Party podcast-இல் interview செய்யப்பட்டார்
-
Matt Carroll Front-End Fire podcast-இல் interview செய்யப்பட்டார்; அங்கு அவர் The Two Reacts பற்றி விவாதித்தார்
இந்த post-ஐ review செய்த Lauren Tan, Sophie Alpert, Jason Bonta, Eli White, மற்றும் Sathya Gunasekaran-க்கு நன்றி.
படித்ததற்கு நன்றி; React Conf-இல் சந்திப்போம்!