React 19
(github.com/facebook)19.0.0 (5 ธันวาคม 2024)
ฟีเจอร์ใหม่
React
- Actions: ตอนนี้
startTransitionรองรับฟังก์ชันแบบอะซิงก์แล้ว ฟังก์ชันเหล่านี้เรียกว่า "Actions" และจะอัปเดต state ในเบื้องหลังพร้อม commit UI ในครั้งเดียว Actions สามารถทำ side effects เช่นคำขอแบบอะซิงก์ได้ และจะรอให้งานเสร็จก่อนที่ Transition จะจบลง useActionState: ฮุกใหม่ที่ใช้จัดลำดับ Actions ภายใน Transition และเข้าถึง state ได้ รับ initial state และ reduceruseOptimistic: ฮุกใหม่สำหรับอัปเดต state ระหว่างที่ Transition กำลังดำเนินอยู่ เมื่อ Transition เสร็จสิ้น state จะถูกอัปเดตเป็นค่าใหม่use: API ใหม่ที่ใช้สำหรับอ่าน resource ระหว่างการเรนเดอร์ รองรับ Promise หรือ Context และหากส่ง Promise มา จะ suspend จนกว่าค่านั้นจะ resolve- ใช้
refเป็น prop: สามารถใช้ ref เป็น prop ได้โดยไม่ต้องใช้forwardRef - การ prewarm sibling ของ Suspense: เมื่อคอมโพเนนต์เกิดการ suspend React จะ commit fallback ของขอบเขต Suspense ที่ใกล้ที่สุดทันที
React DOM Client
- prop
actionของ<form>: Form Actions จะจัดการฟอร์มให้อัตโนมัติและทำงานร่วมกับuseFormStatusโดยจะรีเซ็ตฟอร์มอัตโนมัติเมื่อสำเร็จ - รองรับ document metadata: สามารถเรนเดอร์แท็ก metadata ของเอกสารจากคอมโพเนนต์ได้แบบเนทีฟ
- รองรับ stylesheet: จะแทรก stylesheet เข้าไปใน
<head>ของฝั่งไคลเอนต์ก่อนเปิดเผยเนื้อหาภายในขอบเขต Suspense - รองรับ async script: สามารถเรนเดอร์สคริปต์แบบอะซิงก์ได้จากที่ใดก็ได้ใน component tree
React DOM Server
- เพิ่ม API
prerenderและprerenderToNodeStream: เป็น API สำหรับการสร้าง static site ซึ่งออกแบบมาให้ทำงานในสภาพแวดล้อมแบบสตรีมมิง เช่น Node.js stream และ web stream
React Server Components
- ความสามารถของ RSC: directives, server components และ server functions ถูกทำให้เสถียรแล้ว ไลบรารีที่มี server components สามารถตั้งเป้า React 19 เป็น peer dependency ได้แล้ว
การเลิกใช้งานในอนาคต
- การเข้าถึง
element.ref: เลิกใช้การเข้าถึงelement.refโดยแนะนำให้ใช้element.props.refแทน react-test-renderer: ใน React 19 นั้นreact-test-rendererจะบันทึกคำเตือนการเลิกใช้งาน และเปลี่ยนไปใช้ concurrent rendering สำหรับการใช้งานบนเว็บ
การเปลี่ยนแปลงสำคัญ
React
- ต้องใช้ JSX transform ใหม่: จำเป็นต้องใช้ JSX transform แบบใหม่เพื่อปรับปรุงขนาด bundle และเพื่อให้ใช้ JSX ได้โดยไม่ต้อง import React
- ข้อผิดพลาดระหว่างเรนเดอร์จะไม่ถูกโยนซ้ำ: หาก Error Boundary ไม่ได้จับข้อผิดพลาดไว้ ข้อผิดพลาดจะถูกรายงานไปที่
window.reportError - ลบ
propTypes: การใช้propTypesจะถูกเพิกเฉยแบบเงียบ ๆ แนะนำให้ย้ายไปใช้ TypeScript - ลบ
defaultPropsของฟังก์ชัน: สามารถใช้พารามิเตอร์เริ่มต้นของ ES6 แทนได้ - ลบ string refs: ต้องย้ายการใช้ string refs ไปเป็น ref callback
React DOM
- ลบ
react-dom/test-utils: ย้ายactจากreact-dom/test-utilsไปไว้ใน react ส่วนยูทิลิตีอื่น ๆ ถูกลบออก - ลบ
ReactDOM.render,ReactDOM.hydrate: ถูกแทนที่ด้วยReactDOM.createRootและReactDOM.hydrateRootสำหรับ concurrent rendering
การเปลี่ยนแปลงที่น่าสนใจ
React
- ใช้
<Context>เป็น provider: สามารถเรนเดอร์<Context>เป็น provider ได้แทน<Context.Provider> - รองรับ custom elements: React 19 ผ่านการทดสอบ custom elements ทั้งหมด
- การเปลี่ยนแปลงใน StrictMode:
useMemoและuseCallbackจะนำผลลัพธ์ที่ memoize จากการเรนเดอร์ครั้งแรกกลับมาใช้ซ้ำ
React DOM
- แสดงความแตกต่างสำหรับ hydration errors: หากเกิดความไม่ตรงกัน React 19 จะบันทึกข้อผิดพลาดเพียงรายการเดียวที่มีรายละเอียดความแตกต่างของเนื้อหาที่ไม่ตรงกัน
การเปลี่ยนแปลงใน TypeScript
- ห้าม implicit return: ตอนนี้ refs รองรับเฉพาะ cleanup function เท่านั้น การคืนค่าแบบ implicit จะทำให้เกิดข้อผิดพลาด
- ต้องมีอาร์กิวเมนต์เริ่มต้นของ
useRef: ตอนนี้อาร์กิวเมนต์เริ่มต้นเป็นสิ่งจำเป็น - การพิมพ์ชนิด
ReactElementที่เข้มงวดขึ้น: ตอนนี้ props ของ React element จะตั้งต้นเป็นunknownแทนany
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมไม่ค่อยเข้าใจว่าทำไมคนจำนวนมากที่นี่ถึงเกลียด React กันขนาดนี้
ผมเริ่มอาชีพด้วย Laravel และ JS ล้วน ๆ แต่หลังจากได้ใช้ React การสร้างแอปที่ขยายต่อได้ก็เริ่มรู้สึกเป็นไปได้จริง และงานฟรอนต์เอนด์ก็สนุกขึ้น
ถึงจะเปลี่ยนบริษัท React ก็กลับมาจับต่อได้ง่าย และด้วยการรองรับ TypeScript กับ ecosystem ขนาดใหญ่ ทำให้รู้สึกว่าสามารถสร้างและขยายแทบทุกอย่างได้ค่อนข้างง่าย
ผมก็ไม่เข้าใจเหมือนกันว่าทำไมฟีเจอร์ใหม่ ๆ ถึงทำให้ผู้คนกลัวกัน ยังสามารถทำเป็น SPA หรือใช้วิธีแบบเดิมได้อยู่ เหมือนตอน NoSQL DB, Spring Boot หรือ Kotlin ออกมา ถ้าไม่อยากใช้ก็ไม่ต้องใช้
ผมเข้าใจว่า Jetpack Compose กับ SwiftUI ก็ได้รับแรงบันดาลใจจาก React เหมือนกัน เหมือนเคยเห็นในเอกสาร Android เมื่อก่อน แต่ตอนนี้หาไม่เจอแล้ว
แต่ผมยังไม่ได้มีประสบการณ์หลายสิบปี จึงไม่รู้ว่าทีมขนาดใหญ่ในยุคก่อน ๆ สนุกแค่ไหนตอนสร้างเว็บแอปใหญ่ ๆ อย่าง Airbnb ด้วย jQuery หรือ JS ล้วน ๆ ตอนนี้แค่จินตนาการว่าจะจัดการ state, การ manipulate DOM และ side effects ด้วย JS ล้วน ๆ อย่างไรก็ยากแล้ว
สักวันหนึ่งผมอาจจะบ่นเฟรมเวิร์กใหม่ ๆ แล้วพูดว่า React นั้นดีมากก็ได้
เหตุผลที่มักได้ยินคือ “ฟรอนต์เอนด์คอยไล่ตามของใหม่แวววาวเสมอ และ React ก็เป็นหนึ่งในนั้น” แต่ React มีมาตั้งแต่ปี 2013 และราวปี 2015 ก็ถือว่าค่อนข้างเป็นกระแสหลักแล้ว
อีกอย่าง มักบอกว่าเฟรมเวิร์กและไลบรารีเพิ่ม ความซับซ้อน แต่พอถามว่าซับซ้อนตรงไหนอย่างเป็นรูปธรรม แทบไม่ค่อยได้คำตอบเลย ถ้าสร้างแอปที่มีความหมายโดยไม่ใช้เฟรมเวิร์ก สุดท้ายก็มักจะลงเอยด้วยการประดิษฐ์เฟรมเวิร์กของตัวเองที่ขาดทั้งการดูแล การทดสอบ และเอกสารประกอบ
ขั้นตอน compile และ bundling ก็ถูกบ่นบ่อย แต่ตอนนี้มีเฟรมเวิร์กที่พิสูจน์ตัวเองแล้วอย่าง Expo, Next.js, Meteor จึงแทบไม่มีเหตุผลให้ต้องตั้งค่า webpack หรือเขียน build pipeline เอง
กระแสที่ยัดเว็บเฟรมเวิร์กเข้าไปทุกที่ในช่วง 10 ปีที่ผ่านมา ผลิตไซต์ที่ช้าและพังง่ายออกมามากมาย และหลายครั้งแม้ออกแบบเกินจำเป็น แต่ประสบการณ์ผู้ใช้ก็ไม่ได้ดีขึ้นจากปี 2008 มากนัก
สำหรับนักพัฒนาฟรอนต์เอนด์บางคน ไม่ว่าคำถามคืออะไร คำตอบคือชุดผสมของ React / Node / Vite / Angular / Vue / Nuxt / Next / Bun / Deno / Svelte / SvelteKit ฯลฯ และถ้าเป็นไปได้ต้องรันอยู่บน Docker swarm หลายสิบชุดที่ถูก Kubernetes ครอบงำ ประมาณว่า “อยากเอาเรซูเม่ขึ้นออนไลน์เหรอ? งั้นอีก 3 สัปดาห์ข้างหน้ามาวาดแผนภาพการไหลของ state ของแอปกัน”
เหตุที่ React โดนด่าหนักเป็นพิเศษ น่าจะเพราะคนที่ไล่ตามกระแสเฟรมเวิร์กย้ายไปหาของแวววาวชิ้นถัดไปแล้ว ส่วนคนที่เดิมทีเกลียดเฟรมเวิร์กแบบนี้ก็ยังเกลียดอยู่ ทำให้ตอนนี้ไม่เหลือใครมาปกป้องความวุ่นวายนี้แล้ว เฟรมเวิร์กที่เหลือก็น่าจะเจอชะตากรรมเดียวกันเมื่อเวลาผ่านไป
การทำงานจริงถูกซ่อนไว้เยอะ ไม่เป็นธรรมชาติ ทำพลาดง่าย และเขียน UI ที่ประสิทธิภาพต่ำได้ง่าย
ต้องคอยคิดตลอดว่าอะไรถูกเรียกกี่ครั้ง ต้องใส่อะไรใน dependency array และต้องใส่อะไรใน
useCallbackกับuseEffectทำให้ภาระทางความคิดสูงคนบางส่วนในชุมชนยังแนะนำ dependency ของ React ที่โปรเจกต์ไม่จำเป็นต้องใช้ ทำให้มีแต่ overhead และความซับซ้อนเพิ่มขึ้น
นอกจากนี้ business logic กับ UI logic ก็ปะปนกันได้ง่าย
ช่วงหนึ่ง SPA มีข้อเสียเมื่อเทียบกับ MPA แต่ด้วยมาตรฐานเว็บสมัยใหม่และการนำ server-side rendering มาใช้ใน SPA framework ปัญหาเหล่านั้นตอนนี้แทบได้รับการแก้ไขแล้ว
https://www.youtube.com/watch?v=b2F-DItXtZs
เป็นรีลีสที่ยอดเยี่ยม แต่ก็อดคิดไม่ได้ว่าคนที่เพิ่งเริ่มเข้าสู่ การพัฒนาฟรอนต์เอนด์ ตอนนี้คงน่าสงสารอยู่บ้าง
คำอธิบายอย่าง “เป็น hook ใหม่ที่จัดเรียง Action ภายใน Transition และเข้าถึงสถานะ action กับสถานะ pending ได้ โดยรับ reducer ที่เรียก Action ได้และสถานะเริ่มต้นที่ใช้ในการเรนเดอร์ครั้งแรก อีกทั้งยังรับสตริงแบบเลือกได้เพื่อรองรับ progressive enhancement ของฟอร์มเมื่อส่งให้กับ prop form action” แม้ฟีเจอร์จะดูดี แต่ก็ยืดยาวเกินไปมาก
ถ้าเริ่มพัฒนาเว็บไซต์วันนี้ คงรู้สึกมืดแปดด้านว่าเริ่มจากตรงไหนดี
ถึงอย่างนั้น React ก็ยังเป็นเฟรมเวิร์กที่ยอดเยี่ยม และรีลีสนี้ก็เป็นการปรับปรุงอยู่ดี คำวิจารณ์นี้ไม่ได้เจาะจง React อย่างเดียว แต่ใกล้เคียงกับภาพรวมของการพัฒนาฟรอนต์เอนด์ทั้งหมดมากกว่า
ใช้ server-side rendering แบบเก่าร่วมกับอะไรอย่าง HTMX จะดีกว่ามาก
ผมหาเงินจากการพัฒนาฟรอนต์เอนด์ด้วย React มา 4 ปี และสร้างเว็บไซต์แรกในปี 2005 ตอนนี้กำลังย้ายโปรเจกต์ลูกค้ารายหนึ่งจาก React ไป HTMX และรู้สึกว่าดีกว่ามาก
บั๊กก็น้อยกว่า กับดักจากการใช้ hook ผิดก็น้อยกว่า
ถ้าจำเป็นต้องใช้ client-side rendering ผมคงใช้ Solid หรือ Vue แต่จะเลี่ยง React ถ้าไม่มีทางเลือกก็ขอให้โชคดี
สมมติฐานพื้นฐานอย่าง one-way binding, virtual DOM, การ re-render และการคำนวณ diff นั้นผมไม่เคยเห็นด้วยในระดับรากฐานเลย เท่ากับใช้หน่วยความจำเบราว์เซอร์เป็นสองเท่า และทำการ re-render ทั้งหมดกับคำนวณ diff ทุกครั้งที่มีปฏิสัมพันธ์
ตอนนั้นคำตอบคือ “ทำให้เสถียรก่อน แล้วค่อยทำให้เร็ว” แต่ตอนนี้เต็มไปด้วยโครงสร้างแบบแฮ็กเพื่อทำให้เร็ว และก็ไม่ได้ทั้งเร็วหรือเสถียร
เฟรมเวิร์กแบบ two-way binding ที่ตรงไปตรงมา อย่างน้อยก็รับประกันเรื่องความเร็วได้ ส่วนความเสถียรมาจากประสบการณ์ React นั้นแค่ชวนสับสน ผมรู้สึกเสียดายวิศวกรที่เริ่มฟรอนต์เอนด์ครั้งแรกด้วย React เพราะการลบสิ่งที่เรียนมาแล้วเรียนใหม่คงยากกว่าการเรียนตั้งแต่แรกมาก
จากมุมมองของคนที่ผ่าน VBScript, JS, jQuery, Mootools, Applets, ActionScript, YUI/Ext/Sencha, Backbone, Knockout, Angular 1, Angular 2, React, Vue 1 มาแล้ว ผมอยากบอกให้ลอง Flutter ดู มันสดใหม่จริง ๆ
แต่ปัญหาคือ Dart ถ้า Flutter เป็น TypeScript ก็คงใกล้อุดมคติมากขึ้นอีกหน่อย แต่ Dart ยังทำให้จิตวิญญาณ churn ไม่รู้จบของฟรอนต์เอนด์ยังคงมีชีวิตต่อไป
มาตรฐานเว็บโดยรวมก็เสถียรกว่าที่เคยเป็นมา นักพัฒนารุ่นใหม่ไม่จำเป็นต้องเรียนรู้ทริกเลย์เอาต์เป็นร้อย ๆ แบบเพื่อให้หน้าเว็บแสดงผลถูกต้องในหลายเบราว์เซอร์ และบางครั้งก็ไม่ต้องใช้แฮ็กเพื่อรองรับแค่เบราว์เซอร์เดียวมากเท่าเดิม
ผมเข้าใจความเหนื่อยล้าจาก JavaScript แต่ผมมองว่าตอนนี้เป็นหนึ่งในช่วงเวลาที่ดีที่สุดสำหรับการเรียนรู้
ทุกอย่างให้ความรู้สึกเหมือนเป็น การพัฒนาที่ถูกต้องจริง ๆ และเมื่อเทียบกับสถานการณ์ก่อนหน้า มันเหมือนสูดอากาศบริสุทธิ์
ถ้าเป็นนักพัฒนา 99% ก็คงไม่ต้องใช้ฟีเจอร์แบบนั้นจนกว่าแอปจะโตถึงระดับหนึ่ง และอาจไม่ต้องใช้เลยจนจบก็ได้ React ก็ไม่ได้บังคับ
ครั้งหนึ่งผมเคยชอบเฟรมเวิร์กฝั่งไคลเอนต์อย่าง React แต่สุดท้ายก็รู้ว่ามันเพิ่ม ความซับซ้อน ให้ทุกที่ที่เป็นไปได้
ทั้งแบ็กเอนด์ ฟรอนต์เอนด์ และสแต็ก DevOps ล้วนมีความซับซ้อนแทรกเข้าไป และเพื่อซิงก์ความซับซ้อนที่กระจายตัวเหล่านั้น ก็จะมีเลเยอร์เพิ่มเข้ามาเรื่อย ๆ
การที่ UI re-render อัตโนมัติเมื่อข้อมูลหรือโมเดลเปลี่ยน เป็นทิศทางที่ถูกต้อง
รายละเอียดวิธีทำอาจถกเถียงกันได้ แต่การต้องแก้ UI เองแบบ imperative ทุกครั้งที่ข้อมูลเปลี่ยน เป็นแนวทางที่อยู่ได้นานยากทั้งในแง่ codebase และขนาดทีม
มันโปะความซับซ้อนมหาศาลเพื่อทำให้เว็บเบราว์เซอร์เรนเดอร์กล่องในแบบที่เดิมทีไม่ได้ตั้งใจไว้ และยังสูญเสียผลิตภาพกับระบบเครื่องมือไปมากภายใต้ข้ออ้างว่าจะเปลี่ยนพาราไดม์การเขียนโค้ด
มีไอเดียและการนำไปใช้งานที่เจ๋งอยู่ แต่ไม่แน่ใจว่าคุ้มค่าขนาดนั้นไหม บางทีก็รู้สึกเหมือนเป็นกลไกรักษาความมั่นคงในอาชีพ
ไม่ใช่ปัญหาของ ReactJS อย่างเดียว ระบบนิเวศ JavaScript ทั้งหมดก็คลั่งไคล้ไลบรารีและเครื่องมืออยู่แล้ว แต่ React นั้นเริ่มต้นใช้งานน่ารำคาญเป็นพิเศษ จนสุดท้ายต้องมี create react app ออกมาเพื่อให้สร้างแอป hello world ได้ภายในเวลาที่สมเหตุสมผล
ผมเลิกคาดหวังว่าจะเข้าใจเหตุผลที่เปลี่ยน API ของ class component ไปเป็น hook แล้ว
อาจเลือกเฟรมเวิร์กที่เรียบง่ายกว่านี้ได้ หรืออาจเลี่ยง server orchestration ได้
ถ้าไม่มีทางเลือก ก็อาจเริ่มโปรเจกต์เองที่เชื่อว่าสแต็กที่เรียบง่ายจะให้ความได้เปรียบด้านประสิทธิภาพ
หนึ่งในส่วนที่ดีที่สุดของรีลีสนี้คือ สามารถใช้ ref เป็น prop ได้แล้ว ตอนนี้จึงไม่จำเป็นต้องใช้
forwardRefอีกต่อไปบทความบล็อกอ่านง่ายกว่า: https://react.dev/blog/2024/12/05/react-19
const error = await updateName(newName);ผมไม่เข้าใจว่าทำไมupdateNameถึงคืน errorตามสไตล์ JS/TS แล้ว แค่โยน
Errorไม่ได้หรือ?ถ้าจากคอมเมนต์ 45 รายการจนถึงตอนนี้มีการพูดถึง “redux” 7 ครั้ง ที่นี่ผมอยากพูดถึง Jotai ในฐานะตัวแทนสาย Recoil ดูบ้าง เป็นไปได้สูงว่ามันน่าจะทำงานบน React 19 ได้อยู่แล้วโดยไม่ต้องเปลี่ยนอะไรเป็นพิเศษ
เมื่อความซับซ้อนของฟรอนต์เอนด์ใหญ่พอ เครื่องมือจัดการ state อื่น ๆ ก็มักจะกลายเป็นตัวขัดขวางเกินจำเป็น
ถ้าคุณเริ่มไม่ชอบ React แต่จริง ๆ แล้วเป็นเพราะเหนื่อยกับกำแพง action constants ที่ไม่มีที่สิ้นสุด, การเดินสาย prop, การต่อสู้กับ provider/context ที่ซ้อนกัน และการหนีไปพึ่ง pub-sub ก็น่าลองใช้อะไรอย่าง Jotai ดู
https://github.com/pmndrs/zustand
https://github.com/pmndrs/valtio
Jotai ให้ความรู้สึกว่ามี boilerplate แบบลงมือเองมากเกินไป ส่วน Valtio ก็มี “เวทมนตร์” จาก proxy เยอะ แม้โดยส่วนตัวจะชอบ แต่ก็ไม่แน่ใจว่าเป็นตัวเลือกที่ดีสำหรับทีมหรือไม่
Zustand อยู่กึ่งกลางระหว่าง boilerplate กับเวทมนตร์ เลยเลือกใช้กับโปรเจกต์ใหญ่ที่กำลังทำอยู่ตอนนี้
เมื่อไม่กี่ปีก่อน ตอนเริ่มทำแอป React แพ็กเกจจัดการ state ทุกตัวที่เห็นก็เต็มไปด้วยศัพท์พวกนั้น และตอนนี้ก็ยังเหมือนเดิม
สุดท้ายเลยสร้างโซลูชันเองเพื่อหนีจากสิ่งเหล่านั้นและโฟกัสกับงาน [1] ซึ่งทำงานได้ดีใน production น่าเสียดายที่ไม่มีตัวเลือกยอดนิยมที่ทำงานคล้ายกัน
[1] https://github.com/facepunch/react-class-model
ข้อดีของ context hook คือมันประกอบเข้าด้วยกันได้ และเมื่อจับคู่กับ cached query ก็สร้างแพตเทิร์นที่ดูแลรักษาได้พอสมควร
อยากรู้ว่า Jotai ให้ การปรับปรุงที่เป็นรูปธรรม อะไรตรงนี้
หวังจริง ๆ ว่าจะไม่ต้องยุ่งกับ redux หรือ sagas อีก
ฟีเจอร์ใหม่ส่วนใหญ่ไม่ค่อยถูกใจ
Actions กับ hook
useActionState/useOptimisticดูเหมือนเป็น กับดักความซับซ้อน ขนาดใหญ่ hookuseก็เป็นชื่อที่ไม่สื่อข้อมูลมากเกินไป และไม่จัดการ promise ที่สร้างขึ้นภายในคอมโพเนนต์แน่นอนว่าคงมีเหตุผลที่ดี แต่แนวทางส่ง promise ผ่าน prop แล้วจัดการด้วย hook
useน่าจะสร้างความซับซ้อนมากกว่าวิธีเลี่ยงที่ใช้อยู่ตอนนี้Server Components ก็ดูค่อนข้างซับซ้อน และดีแล้วที่ยังไม่มีงานที่ต้องไปยุ่งกับมัน
การปรับปรุงข้อความ error ของ hydration เป็นเรื่องน่ายินดี และการเปลี่ยนให้ใช้เป็น provider กับการเปลี่ยนให้ใช้ ref เป็น prop ก็เป็นการปรับปรุงคุณภาพที่ดี
โดยรวมแล้วสำหรับการสร้าง SPA ผมชอบ React/Preact ถ้าใช้ร่วมกับไลบรารีคอมโพเนนต์ที่ฟีเจอร์ครบอย่าง MUI และโซลูชันจัดการ state แบบเรียบง่ายอย่าง Preact Signals การทำ SPA ก็ค่อนข้างตรงไปตรงมา
แต่กังวลว่าความซับซ้อนกำลังค่อย ๆ แทรกเข้ามา แค่อ่านคำอธิบาย hook ใหม่ใน release notes ก็รู้สึกว่าภาระทางความคิดสูงมากแล้ว
ในทางกลับกัน React Compiler เป็นเครื่องมือที่จำเป็นจริง ๆ เพราะโปรแกรมเมอร์จะไม่ต้องเขียน optimization แบบทั่วไปไว้ในคอมโพเนนต์เอง ทำให้คอมโพเนนต์ซับซ้อนน้อยลง
ตั้งตารอ release และการ integrate กับ Vite เป็นต้น และเท่าที่ได้ยินมา Preact ก็จะรองรับด้วย
อยากให้เปลี่ยนชื่อ API
useเป็นชื่ออื่นที่ต่างจาก prefix ร่วมของ hookคนที่เพิ่งเริ่มใช้ React hooks อาจสับสนเมื่อเห็นว่า
useเรียกแบบมีเงื่อนไขได้ แต่ hooks ทั่วไปทำไม่ได้ดีใจจริง ๆ ที่เลื่อน release เพื่อแก้ปัญหา Suspense แบบขนาน
ยังไม่ได้ลองใช้ แต่คาดหวังไว้มาก และโดยรวมเป็น release ที่ยอดเยี่ยม
ข่าวด่วน: รองรับ custom elements อย่างเต็มรูปแบบ นั่นก็คือ Web Components