กลับไปหน้าบทความ

อ่าน 16 นาที

รีแอค (ซอฟต์แวร์)

React (หรือที่รู้จักกันในชื่อReact.jsหรือReactJS ) เป็นไลบรารี JavaScript สำหรับส่วนหน้าแบบโอเพนซอร์สและฟรี ที่มุ่งเน้นการสร้างส่วนติดต่อผู้ใช้โดยใช้คอมโพเนนต์ ให้ "ราบรื่น"...

รีแอค (ซอฟต์แวร์)

( เรียนรู้วิธีและเวลาในการลบข้อความนี้ )
ปฏิกิริยา
ผู้เขียนต้นฉบับจอร์แดน วอล์ค
นักพัฒนาเมตาและชุมชน
ปล่อย29 พฤษภาคม 2556 [ 1 ] [ 2 ] ( 29 พฤษภาคม 2013 )
เวอร์ชันเสถียร
19.2.7 [ 3 ] แก้ไขข้อมูลนี้บนวิกิดาต้า / 1 มิถุนายน 2026 [ 4 ] ( 1 มิถุนายน 2569 )
เวอร์ชันทดลองใช้งาน
19.0.0-rc.1 / 14 พฤศจิกายน 2024 [ 5 ] ( 14 พฤศจิกายน 2024 )
เขียนเป็นโค้ด JavaScript
แพลตฟอร์มแพลตฟอร์มเว็บ
พิมพ์ไลบรารี JavaScript
ใบอนุญาตใบอนุญาต MIT
เว็บไซต์react .dev แก้ไขข้อมูลนี้บนวิกิดาต้า
ที่เก็บข้อมูล
  • github.com/facebook/react

React (หรือที่รู้จักกันในชื่อReact.jsหรือReactJS ) เป็นไลบรารี JavaScript สำหรับส่วนหน้าแบบโอเพนซอร์สและฟรี[ 6 ] [ 7 ]ที่มุ่งเน้นการสร้างส่วนติดต่อผู้ใช้โดยใช้คอมโพเนนต์ ให้ "ราบรื่น" มากขึ้น[ 6 ]ได้รับการดูแลโดยMeta (เดิมคือ Facebook) และชุมชนของนักพัฒนาและบริษัทต่างๆ[ 8 ] [ 9 ] [ 10 ]จากผลสำรวจนักพัฒนา Stack Overflow ปี 2025 พบว่า React เป็นหนึ่งในเทคโนโลยีเว็บที่ใช้กันมากที่สุด[ 11 ]

React สามารถใช้ในการพัฒนา แอปพลิเคชัน แบบหน้าเดียว แอปพลิเคชัน บนมือถือ หรือ แอป พลิเคชันที่แสดงผล บนเซิร์ฟเวอร์ โดยใช้เฟรมเวิร์กต่างๆ เช่นNext.jsและReact Routerเนื่องจาก React เกี่ยวข้องเฉพาะกับส่วนติดต่อผู้ใช้และการแสดงผลคอมโพเนนต์ไปยังDOM เท่านั้น แอปพลิเคชัน React จึงมักอาศัยไลบรารีสำหรับการกำหนดเส้นทางและฟังก์ชันการทำงานฝั่งไคลเอ็นต์อื่นๆ[ 12 ] [ 13 ]ข้อได้เปรียบที่สำคัญของ React คือจะแสดงผลเฉพาะส่วนของหน้าเว็บที่เปลี่ยนแปลงไปเท่านั้น หลีกเลี่ยงการแสดงผลซ้ำโดยไม่จำเป็นขององค์ประกอบ DOM ที่ไม่เปลี่ยนแปลง React ถูกใช้โดยเว็บไซต์ประมาณ 6% ของเว็บไซต์ทั้งหมด[ 14 ]

คุณสมบัติ

การประกาศ

React ยึดมั่นในกระบวนทัศน์ การเขียนโปรแกรม แบบประกาศ[ 15 ] [ 16 ] : นักพัฒนาออกแบบมุมมองสำหรับแต่ละสถานะของแอปพลิเคชัน และ React จะอัปเดตและเรนเดอร์คอมโพเนนต์เมื่อข้อมูลเปลี่ยนแปลง ซึ่งแตกต่างจาก การ เขียนโปรแกรมแบบเชิงคำสั่ง[ 17 ]

ส่วนประกอบ

โค้ด React ประกอบด้วยเอนทิตีที่เรียกว่าคอมโพเนนต์[ 16 ] : 10–12 คอมโพเนนต์เหล่านี้เป็นแบบโมดูลาร์และสามารถนำกลับมาใช้ใหม่ได้[ 16 ] : 70 แอปพลิเคชัน React โดยทั่วไปประกอบด้วยคอมโพเนนต์หลายชั้น คอมโพเนนต์จะถูกเรนเดอร์ไปยังองค์ประกอบรากในDOMโดยใช้ไลบรารี React DOM เมื่อเรนเดอร์คอมโพเนนต์ ค่าต่างๆ จะถูกส่งผ่านระหว่างคอมโพเนนต์ผ่านprops (ย่อมาจาก "properties") ค่าภายในคอมโพเนนต์เรียกว่าสถานะ ของคอมโพเนนต์ [ 18 ]

วิธีการหลักสองวิธีในการประกาศคอมโพเนนต์ใน React คือการใช้คอมโพเนนต์ฟังก์ชันและคอมโพเนนต์คลาส[ 16 ] : 118 [ 19 ] : 10 ตั้งแต่ React เวอร์ชัน 16.8 เป็นต้นไป การใช้คอมโพเนนต์ฟังก์ชันเป็นวิธีที่แนะนำ

ส่วนประกอบการทำงาน

คอมโพเนนต์ฟังก์ชัน ซึ่งประกาศในงาน React Conf 2018 และใช้งานได้ตั้งแต่ React เวอร์ชัน 16.8 จะถูกประกาศด้วยฟังก์ชันที่รับอาร์กิวเมนต์ "props" เพียงตัวเดียวและส่งคืน JSX (JavaScript XML) คอมโพเนนต์ฟังก์ชันสามารถใช้สถานะภายในด้วยuseStateHook ได้ [ 20 ]

React Hooks

เมื่อวันที่ 16 กุมภาพันธ์ 2019 React 16.8 ได้ถูกเผยแพร่สู่สาธารณะ โดยมีการแนะนำ React Hooks [ 20 ] Hooks คือฟังก์ชันที่ช่วยให้นักพัฒนาสามารถ "เชื่อมต่อ" กับสถานะและคุณสมบัติวงจรชีวิตของ React จากคอมโพเนนต์ฟังก์ชันได้[ 21 ]ที่สำคัญ Hooks ไม่ทำงานภายในคลาส — ช่วยให้นักพัฒนาสามารถใช้คุณสมบัติเพิ่มเติมของ React ได้โดยไม่ต้องใช้คลาส[ 22 ]

React มี hook ในตัวหลายตัว เช่น[ 23useState ] [ 19 ] : 37 , useContext [ 16 ] : 11 [ 23 ] [ 19 ] : 12 useReducer , [ 16 ] : 92 [ 23 ] [ 19 ] : 65–66 useMemo[ 16 ] : 154 [ 23 ] [ 19 ] : 162 และuseEffect[ 24 ] [ 19 ] : 93–95 hook อื่นๆ ได้รับการบันทึกไว้ใน Hooks API Reference [ 25 ] [ 16 ] : 62 และ ซึ่งเป็น hookที่ใช้กันมากที่สุด ใช้สำหรับควบคุมสถานะ[ 16 ] : 37 และผลข้างเคียง [ 16 ] : 61 ตามลำดับ useStateuseEffect

กฎของการใช้ตะขอ

มีกฎสองข้อของฮุก[ 26 ]ซึ่งอธิบายรูปแบบโค้ดลักษณะเฉพาะที่ฮุกใช้:

  1. "เรียกใช้ hook เฉพาะในระดับบนสุดเท่านั้น" — ห้ามเรียกใช้ hook จากภายในลูป เงื่อนไข หรือคำสั่งซ้อนกัน เพื่อให้ hook ถูกเรียกใช้ในลำดับเดียวกันทุกครั้งที่แสดงผล
  2. "เรียกใช้ hook จากฟังก์ชัน React เท่านั้น" — ห้ามเรียกใช้ hook จากฟังก์ชัน JavaScript ทั่วไป เพื่อให้ตรรกะที่มีสถานะยังคงอยู่กับคอมโพเนนต์

แม้ว่ากฎเหล่านี้จะไม่สามารถบังคับใช้ได้ในขณะรันไทม์ แต่เครื่องมือวิเคราะห์โค้ด เช่นlintersสามารถกำหนดค่าเพื่อตรวจจับข้อผิดพลาดมากมายในระหว่างการพัฒนาได้ กฎเหล่านี้ใช้ได้ทั้งกับการใช้งาน Hooks และการใช้งาน Hooks แบบกำหนดเอง[ 27 ]ซึ่งอาจเรียก Hooks อื่นๆ

ส่วนประกอบของเซิร์ฟเวอร์

คอมโพเนนต์เซิร์ฟเวอร์ React ( RSC ) [ 28 ]เป็นคอมโพเนนต์ฟังก์ชันที่ทำงานเฉพาะบนเซิร์ฟเวอร์เท่านั้น แนวคิดนี้ได้รับการแนะนำครั้งแรกในการบรรยายเรื่อง "การดึงข้อมูลด้วยคอมโพเนนต์เซิร์ฟเวอร์" [ 29 ] ปัจจุบัน คอมโพเนนต์เซิร์ฟเวอร์สามารถใช้งานได้ง่ายที่สุดกับNext.jsด้วย Next.js ทำให้สามารถเขียนคอมโพเนนต์สำหรับทั้งเซิร์ฟเวอร์และไคลเอ็นต์ (เบราว์เซอร์) ได้ เมื่อเบราว์เซอร์ได้รับคอมโพเนนต์ที่แสดงผลจากเซิร์ฟเวอร์ React ในเบราว์เซอร์จะเข้ามารับช่วงต่อและสร้าง Virtual DOM และแนบตัวจัดการเหตุการณ์ ซึ่งเรียกว่าไฮเดรชั่น[ 30 ]

แม้ว่าจะมีแนวคิดคล้ายกับการเรนเดอร์ฝั่งเซิร์ฟเวอร์ (Server Side Rendering ) แต่ RSC ไม่ส่ง JavaScript ที่เกี่ยวข้องไปยังไคลเอ็นต์ เนื่องจากไม่มีการไฮเดรชั่นเกิดขึ้น ส่งผลให้ไม่สามารถเข้าถึงฮุกได้ อย่างไรก็ตาม อาจเป็นฟังก์ชันแบบอะซิงโครนัสซึ่งช่วยให้สามารถดำเนินการแบบอะซิงโครนัสได้โดยตรง:

ฟังก์ชันอะซิงโครนัสMyComponent () {const message = await fetchMessageFromDb ();กลับ(<div> ข้อความ: { ข้อความ} </div>);}

ส่วนประกอบของคลาส

คอมโพเนนต์แบบคลาสถูกประกาศโดยใช้ คลาส ES6โดยจะทำงานในลักษณะเดียวกับคอมโพเนนต์แบบฟังก์ชัน แต่แทนที่จะใช้ Hooks ในการจัดการสถานะและเหตุการณ์วงจรชีวิต คอมโพเนนต์แบบคลาสจะใช้วิธีการวงจรชีวิตของReact.Componentคลาสพื้นฐานแทน

คลาสParentComponent สืบทอดมาจากReact.Component {สถานะ= { สี: 'สีเขียว' };เรนเดอร์() {กลับ(< ChildComponent color = { this . state . color } />);}}

การกำหนดเส้นทาง

React เองไม่ได้มาพร้อมกับการสนับสนุนการกำหนดเส้นทาง ในตัว React เป็นไลบรารีสำหรับการสร้างอินเทอร์เฟซผู้ใช้เป็นหลัก และไม่ได้รวมโซลูชันการกำหนดเส้นทางแบบเต็มรูปแบบไว้ในตัว ไลบรารีของบุคคลที่สามสามารถใช้เพื่อจัดการการกำหนดเส้นทางในแอปพลิเคชัน React ได้ เช่น React Router [ 31 ]ซึ่งช่วยให้นักพัฒนาสามารถกำหนดเส้นทาง จัดการการนำทาง และจัดการการเปลี่ยนแปลง URL ในลักษณะที่เป็นมิตรกับ React

มี Virtual DOM ที่ใช้ในการสร้าง Real DOM ขึ้นมา

โดเมนเสมือน (Virtual DOM)

อีกหนึ่งคุณสมบัติที่โดดเด่นคือการใช้Document Object Model เสมือน หรือVirtual DOM React สร้าง โครงสร้างข้อมูล ในหน่วยความจำที่คล้ายกับ DOM ของเบราว์เซอร์ ทุกครั้งที่คอมponent ถูกเรนเดอร์ ผลลัพธ์จะถูกเปรียบเทียบกับ Virtual DOM จากนั้นจะอัปเดต DOM ที่แสดงในเบราว์เซอร์อย่างมีประสิทธิภาพโดยใช้เฉพาะส่วนต่างที่คำนวณได้[ 32 ]กระบวนการนี้เรียกว่าการกระทบยอด (reconciliation ) ซึ่งช่วยให้โปรแกรมเมอร์สามารถเขียนโค้ดได้ราวกับว่าทั้งหน้าเว็บถูกเรนเดอร์ทุกครั้งที่มีการเปลี่ยนแปลง ในขณะที่ React จะเรนเดอร์เฉพาะคอมponent ที่เปลี่ยนแปลงจริงเท่านั้น การเรนเดอร์แบบเลือกนี้ช่วยเพิ่มประสิทธิภาพได้อย่างมาก[ 33 ] [ 34 ]

การอัปเดต

เมื่อReactDOM.render[ 35 ]ถูกเรียกอีกครั้งสำหรับส่วนประกอบและเป้าหมายเดียวกัน React จะแสดงสถานะ UI ใหม่ใน Virtual DOM และกำหนดว่าส่วนใด (ถ้ามี) ของ living DOM จำเป็นต้องเปลี่ยนแปลง[ 36 ]

การอัปเดต realDOM ขึ้นอยู่กับ virtualDOM
virtualDOM จะอัปเดต realDOM แบบเรียลไทม์

วิธีการวงจรชีวิต

เมธอดวงจรชีวิตสำหรับคอมโพเนนต์แบบคลาสใช้รูปแบบการฮุก (hooking)ซึ่งช่วยให้สามารถเรียกใช้โค้ด ณ จุดที่กำหนดไว้ในระหว่างอายุการใช้งานของคอมโพเนนต์ได้

  • ShouldComponentUpdateช่วยให้นักพัฒนาสามารถป้องกันการเรนเดอร์คอมโพเนนต์ซ้ำโดยไม่จำเป็นได้ โดยการส่งค่า false กลับมาหากไม่จำเป็นต้องเรนเดอร์
  • componentDidMountฟังก์ชัน นี้จะถูกเรียกเมื่อคอมโพเนนต์ "ถูกติดตั้ง" แล้ว (คอมโพเนนต์ถูกสร้างขึ้นในส่วนติดต่อผู้ใช้ โดยส่วนใหญ่มักทำโดยการเชื่อมโยงกับ โหนด DOM ) โดยทั่วไปแล้วจะใช้เพื่อเรียกใช้งานการโหลดข้อมูลจากแหล่งข้อมูลระยะไกลผ่านAPI
  • componentDidUpdateจะถูกเรียกใช้ทันทีหลังจากการอัปเดตเกิดขึ้น[ 37 ]
  • componentWillUnmountฟังก์ชันนี้จะถูกเรียกทันทีก่อนที่คอมโพเนนต์จะถูกรื้อถอนหรือ "ยกเลิกการติดตั้ง" โดยทั่วไปแล้วจะใช้เพื่อล้างการพึ่งพาที่ใช้ทรัพยากรมากของคอมโพเนนต์ ซึ่งจะไม่ถูกลบออกไปพร้อมกับการยกเลิกการติดตั้งคอมโพเนนต์ (เช่น การลบอินสsetInterval()แตนซ์ใดๆ ที่เกี่ยวข้องกับคอมโพเนนต์ หรือ " eventListener " ที่ตั้งค่าไว้บน "document" เนื่องจากการมีอยู่ของคอมโพเนนต์)
  • renderเป็นเมธอดวงจรชีวิตที่สำคัญที่สุดและเป็นเมธอดเดียวที่จำเป็นในทุกคอมโพเนนต์ โดยปกติจะถูกเรียกใช้ทุกครั้งที่สถานะของคอมโพเนนต์ได้รับการอัปเดต ซึ่งควรสะท้อนให้เห็นในส่วนติดต่อผู้ใช้

เจเอสเอ็กซ์

JSXหรือ JavaScript XML เป็นส่วนขยายของไวยากรณ์ภาษา JavaScript [ 38 ]มีลักษณะคล้ายกับ HTML [ 16 ] : 11 JSX ให้วิธีการจัดโครงสร้างการเรนเดอร์คอมโพเนนต์โดยใช้ไวยากรณ์ที่คุ้นเคย[ 16 ] : 15 สำหรับนักพัฒนาหลายคน คอมโพเนนต์ React มักเขียนโดยใช้ JSX แม้ว่าจะไม่จำเป็นเสมอไป (คอมโพเนนต์อาจเขียนด้วย JavaScript บริสุทธิ์ก็ได้) ในระหว่างการคอมไพล์ JSX จะถูกแปลงเป็นโค้ด JavaScript JSX คล้ายกับไวยากรณ์ส่วนขยายอีกตัวหนึ่งที่สร้างโดย Facebook สำหรับPHPที่ เรียกว่าXHP

ตัวอย่างโค้ด JSX:

ฟังก์ชันExample () { // ประกาศตัวแปรสถานะใหม่ ซึ่งเราจะเรียกว่า "count" const [ count , setCount ] = useState ( 0 );return ( < div > < p > คุณคลิก{ count } ครั้ง</ p > < button onClick = {() => setCount ( count + 1 )}> คลิกฉัน</ button > </ div > ); }

สถาปัตยกรรมที่เหนือกว่า HTML

สถาปัตยกรรมพื้นฐานของ React ใช้ได้นอกเหนือจากการเรนเดอร์ HTML ในเบราว์เซอร์ ตัวอย่างเช่น Facebook มีแผนภูมิแบบไดนามิกที่เรนเดอร์เป็น<canvas>แท็ก[ 39 ]และ Netflix และPayPalใช้การโหลดแบบสากลเพื่อเรนเดอร์ HTML ที่เหมือนกันทั้งบนเซิร์ฟเวอร์และไคลเอ็นต์[ 40 ] [ 41 ]นอกจากนี้ React ยังสามารถใช้เพื่อพัฒนาแอปเนทีฟสำหรับ Android และ iOS โดยใช้React Nativeได้ อีกด้วย

การเรนเดอร์ฝั่งเซิร์ฟเวอร์

การเรนเดอร์ฝั่งเซิร์ฟเวอร์ (SSR) หมายถึงกระบวนการเรนเดอร์แอปพลิเคชัน JavaScript ฝั่งไคลเอ็นต์บนเซิร์ฟเวอร์ แทนที่จะเป็นในเบราว์เซอร์[ 42 ]ซึ่งสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันได้ โดยเฉพาะอย่างยิ่งสำหรับผู้ใช้ที่มีการเชื่อมต่อหรืออุปกรณ์ที่ช้ากว่า[ 43 ]

ด้วย SSR HTML เริ่มต้นที่ส่งไปยังไคลเอ็นต์จะรวม UI ที่แสดงผลอย่างสมบูรณ์ของแอปพลิเคชัน[ 44 ]ซึ่งช่วยให้เบราว์เซอร์ของไคลเอ็นต์แสดง UI ได้ทันที แทนที่จะต้องรอให้ JavaScript ดาวน์โหลดและทำงานก่อนจึงจะแสดงผล UI ได้[ 44 ]

React รองรับ SSR ซึ่งช่วยให้นักพัฒนาสามารถเรนเดอร์คอมโพเนนต์ React บนเซิร์ฟเวอร์และส่ง HTML ที่ได้ไปยังไคลเอ็นต์[ 45 ]ซึ่งอาจเป็นประโยชน์ในการปรับปรุงประสิทธิภาพของแอปพลิเคชัน รวมถึงเพื่อวัตถุประสงค์ในการเพิ่มประสิทธิภาพการค้นหาในเครื่องมือค้นหา[ 46 ]

สำนวนทั่วไป

React ไม่ได้พยายามที่จะจัดหาไลบรารีแอปพลิเคชันที่สมบูรณ์ มันถูกออกแบบมาโดยเฉพาะสำหรับการสร้างอินเทอร์เฟซผู้ใช้[ 6 ]และด้วยเหตุนี้จึงไม่ได้รวมเครื่องมือมากมายที่นักพัฒนาบางคนอาจพิจารณาว่าจำเป็นสำหรับการสร้างแอปพลิเคชัน ซึ่งทำให้สามารถเลือกไลบรารีใดก็ได้ที่นักพัฒนาต้องการเพื่อทำงานต่างๆ เช่น การเข้าถึงเครือข่ายหรือการจัดเก็บข้อมูลในเครื่อง รูปแบบการใช้งานทั่วไปได้เกิดขึ้นเมื่อไลบรารีมีความสมบูรณ์มากขึ้น

การไหลของข้อมูลแบบทิศทางเดียว

เพื่อรองรับแนวคิดการไหลของข้อมูลแบบทิศทางเดียวของ React (ซึ่งอาจแตกต่างจากการไหลแบบสองทิศทางของAngularJS ) สถาปัตยกรรม Fluxจึงถูกพัฒนาขึ้นมาเพื่อเป็นทางเลือกแทน สถาปัตยกรรม model–view–controller ที่ได้รับความนิยม Flux มีแอ็กชันที่ส่งผ่านตัวส่ง ส่วนกลาง ไปยังสโตร์และการเปลี่ยนแปลงในสโตร์จะถูกส่งกลับไปยังวิว[ 47 ]เมื่อใช้กับ React การส่งต่อนี้จะทำผ่านคุณสมบัติของคอมโพเนนต์ นับตั้งแต่เริ่มพัฒนา Flux ก็ถูกแทนที่ด้วยไลบรารีต่างๆ เช่นReduxและ MobX [ 48 ]

ฟลัก ซ์สามารถถือได้ว่าเป็นรูปแบบหนึ่งของการสังเกตการณ์[ 49 ]

คอมponent React ภายใต้สถาปัตยกรรม Flux ไม่ควรแก้ไข props ที่ส่งมาโดยตรง แต่ควรส่งฟังก์ชัน callbackที่สร้างactionซึ่งจะถูกส่งโดย dispatcher เพื่อแก้ไข store action คืออ็อบเจ็กต์ที่มีหน้าที่อธิบายสิ่งที่เกิดขึ้น ตัวอย่างเช่น action ที่อธิบายว่าผู้ใช้คนหนึ่ง "ติดตาม" อีกคนหนึ่ง อาจประกอบด้วย user id, target user id และ type USER_FOLLOWED_ANOTHER_USER[ 50 ] storeซึ่งสามารถคิดได้ว่าเป็นโมเดล สามารถเปลี่ยนแปลงตัวเองเพื่อตอบสนองต่อ action ที่ได้รับจาก dispatcher

รูปแบบนี้บางครั้งแสดงออกมาในรูปแบบ "คุณสมบัติไหลลง การกระทำไหลขึ้น" มีการสร้างการใช้งาน Flux มากมายนับตั้งแต่เริ่มแรก ซึ่งอาจเป็นที่รู้จักมากที่สุดคือReduxซึ่งมี store เดียว มักเรียกว่าแหล่งที่มาของความจริงเพียงแหล่งเดียว[ 51 ]

ในเดือนกุมภาพันธ์ พ.ศ. 2562 useReducerได้มีการนำเสนอเป็นReact hookในเวอร์ชัน 16.8 โดยมี API ที่สอดคล้องกับ Redux ทำให้ผู้พัฒนาสามารถสร้าง store ที่คล้ายกับ Redux ซึ่งอยู่ภายในสถานะของคอมโพเนนต์ได้[ 52 ]

ประวัติศาสตร์

React ถูกสร้างขึ้นโดย Jordan Walke วิศวกรซอฟต์แวร์ที่ Facebook, Inc. (ปัจจุบันคือ Meta ) ซึ่งในตอนแรกได้พัฒนาต้นแบบที่เรียกว่า "F-Bolt" [ 53 ]ก่อนที่จะเปลี่ยนชื่อเป็น "FaxJS" ในภายหลัง เวอร์ชันแรกนี้ได้รับการบันทึกไว้ในที่เก็บ GitHub ของ Jordan Walke [1]อิทธิพลสำหรับโครงการนี้รวมถึงXHPซึ่ง เป็นไลบรารี ส่วนประกอบ HTMLสำหรับPHP

React ถูกนำไปใช้งานครั้งแรกบน News Feedของ Facebook ในปี 2011 และต่อมาได้ถูกรวมเข้ากับInstagramในปี 2012 [ 54 ]ในเดือนพฤษภาคม 2013 ที่งาน JSConf US โครงการนี้ได้รับการเปิดเผยเป็นโอเพนซอร์สอย่างเป็นทางการ ซึ่งถือเป็นจุดเปลี่ยนสำคัญในการนำไปใช้งานและการเติบโต[2]

React Nativeซึ่งเป็นเครื่องมือที่ช่วยให้สามารถพัฒนาแอปพลิเคชันแบบเนทีฟสำหรับAndroid , iOSและUWPด้วย React ได้รับการประกาศเปิดตัวในงาน React Conf ของ Facebook ในเดือนกุมภาพันธ์ 2015 และเปิดให้ใช้งานแบบโอเพนซอร์สในเดือนมีนาคม 2015

เมื่อวันที่ 18 เมษายน 2560 Facebook ได้ประกาศ React Fiber ซึ่งเป็นชุดอัลกอริธึมภายในชุดใหม่สำหรับการเรนเดอร์ ซึ่งแตกต่างจากอัลกอริธึมการเรนเดอร์แบบเก่าของ React ที่เรียกว่า Stack [ 55 ] React Fiber จะกลายเป็นรากฐานของการปรับปรุงและการพัฒนาฟีเจอร์ในอนาคตของไลบรารี React [ 56 ]ไวยากรณ์จริงสำหรับการเขียนโปรแกรมด้วย React ไม่เปลี่ยนแปลง มีเพียงวิธีการทำงานของไวยากรณ์เท่านั้นที่เปลี่ยนไป[ 57 ]ระบบการเรนเดอร์แบบเก่าของ React ที่เรียกว่า Stack ถูกพัฒนาขึ้นในช่วงเวลาที่ยังไม่เข้าใจถึงจุดเน้นของระบบในเรื่องการเปลี่ยนแปลงแบบไดนามิก Stack จึงวาดแอนิเมชันที่ซับซ้อนได้ช้า เช่น การพยายามทำให้เสร็จทั้งหมดในครั้งเดียว Fiber จะแบ่งแอนิเมชันออกเป็นส่วนๆ ที่สามารถกระจายออกไปได้หลายเฟรม ในทำนองเดียวกัน โครงสร้างของหน้าเว็บสามารถแบ่งออกเป็นส่วนๆ ที่สามารถบำรุงรักษาและอัปเดตแยกกันได้ ฟังก์ชัน JavaScript และออบเจ็กต์ Virtual DOMเรียกว่า "ไฟเบอร์" และแต่ละส่วนสามารถดำเนินการและอัปเดตแยกกันได้ ทำให้การเรนเดอร์บนหน้าจอราบรื่นยิ่งขึ้น[ 58 ]

เมื่อวันที่ 26 กันยายน 2017 React 16.0 ได้ถูกเผยแพร่สู่สาธารณะ[ 59 ] React 16.0 ได้แนะนำ error boundaries ซึ่งเป็นประเภทคอมโพเนนต์ใหม่ที่ดักจับข้อผิดพลาด JavaScript ได้ทุกที่ในโครงสร้างลูก และแสดง UI สำรองแทนที่จะทำให้แอปหยุดทำงาน[ 60 ]

เมื่อวันที่ 20 ตุลาคม 2020 ทีม React ได้ปล่อย React v17.0 ซึ่งถือเป็นการเปิดตัวเวอร์ชันหลักครั้งแรกที่ไม่มีการเปลี่ยนแปลงที่สำคัญใดๆ ต่อ API ที่นักพัฒนา React ใช้งาน[ 61 ]

เมื่อวันที่ 29 มีนาคม พ.ศ. 2565 React 18 ได้ถูกปล่อยออกมา ซึ่งได้แนะนำตัวเรนเดอร์แบบพร้อมกันใหม่ การจัดกลุ่มอัตโนมัติ และการสนับสนุนการเรนเดอร์ฝั่งเซิร์ฟเวอร์ด้วย Suspense [ 62 ] React 18 ได้ยกเลิกการสนับสนุนInternet Explorer 11 [ 63 ]

เมื่อวันที่ 5 ธันวาคม พ.ศ. 2567 React 19 ได้ถูกปล่อยออกมา เวอร์ชันนี้ได้แนะนำ Actions ซึ่งช่วยลดความซับซ้อนของกระบวนการอัปเดตสถานะโดยใช้ฟังก์ชันแบบอะซิงโครนัส แทนที่จะต้องจัดการสถานะที่รอดำเนินการ ข้อผิดพลาด และการอัปเดตแบบมองโลกในแง่ดีด้วยตนเอง React 19 ยังรวมถึงการสนับสนุนส่วนประกอบเซิร์ฟเวอร์และการสร้างไซต์แบบคงที่ที่ได้รับการปรับปรุง[ 64 ]

ในเดือนตุลาคม พ.ศ. 2568 Meta ประกาศว่าจะบริจาค React, React Native และ JSX ( JavaScript XML ) ให้กับ React Foundation แห่งใหม่ ซึ่งเป็นส่วนหนึ่งของLinux Foundation [ 65 ]ในวันที่ 24 กุมภาพันธ์ พ.ศ. 2569 React Foundation เปิดตัวอย่างเป็นทางการ โดย Meta Platforms, Inc. ได้บริจาคโครงการ React ให้กับมูลนิธิ[ 66 ]

เมื่อวันที่ 29 พฤศจิกายน 2025 มีการรายงานช่องโหว่ CVE-2025-55182 หรือที่รู้จักกันในชื่อ React2Shell ซึ่งอนุญาตให้มีการเรียกใช้โค้ดจากระยะไกล ช่องโหว่นี้ได้รับ คะแนน CVSSสูงสุดที่ 10.0 [ 67 ] [ 68 ]มีการแก้ไขในเวอร์ชัน 19.0.1, 19.1.2 และ 19.2.1 [ 69 ]

เมื่อวันที่ 11 ธันวาคม พ.ศ. 2568 ทีม React ได้เปิดเผยช่องโหว่เพิ่มเติมใน React Server Components ได้แก่ ปัญหาการโจมตีแบบปฏิเสธการให้บริการ (CVE-2025-55184 และ CVE-2025-67779, CVSS 7.5) และปัญหาการเปิดเผยซอร์สโค้ด (CVE-2025-55183, CVSS 5.3) [ 70 ] [ 71 ] [ 72 ] [ 73 ] [ 74 ]การแก้ไขได้รับการย้อนกลับไปใช้ในเวอร์ชัน 19.0.3, 19.1.4 และ 19.2.3 [ 75 ]

ประวัติเวอร์ชันของ React
เวอร์ชั่น วันวางจำหน่าย การเปลี่ยนแปลง
0.3.0 29 พฤษภาคม 2556 การเผยแพร่สู่สาธารณะครั้งแรก
0.4.0 20 กรกฎาคม 2556 รองรับโหนดแสดงความคิดเห็น<div>{/* */}</div>, ปรับปรุง API การเรนเดอร์ฝั่งเซิร์ฟเวอร์, ลบ React.autoBind, รองรับพร็อพ key, ปรับปรุงฟอร์ม, แก้ไขข้อบกพร่อง
0.5.0 20 ตุลาคม 2556 ปรับปรุงการใช้หน่วยความจำ, รองรับเหตุการณ์ Selection และ Composition, รองรับ getInitialState และ getDefaultProps ใน mixins, เพิ่ม React.version และ React.isValidClass, ปรับปรุงความเข้ากันได้กับ Windows
0.8.0 20 ธันวาคม 2556 เพิ่มการรองรับ rows & cols, defer & async, loop for <audio>& <video>, และแอตทริบิวต์ autoCorrect เพิ่มเหตุการณ์ onContextMenu ปรับปรุงเครื่องมือ jstransform และ esprima-fb ปรับปรุง browserify
0.9.0 20 กุมภาพันธ์ 2557 เพิ่มการรองรับสำหรับ crossOrigin, download และ hrefLang, mediaGroup และ muted, sandbox, seamless และ srcDoc, คุณสมบัติขอบเขต (scope) เพิ่ม any, arrayOf, component, oneOfType, renderable, shape ลงใน React.PropTypes เพิ่มการรองรับเหตุการณ์ onMouseOver และ onMouseOut เพิ่มการรองรับ onLoad และ onError บน<img>องค์ประกอบต่างๆ
0.10.0 21 มีนาคม 2557 เพิ่มการรองรับแอตทริบิวต์ srcSet และ textAnchor เพิ่มฟังก์ชันอัปเดตสำหรับข้อมูลที่ไม่สามารถเปลี่ยนแปลงได้ ตรวจสอบให้แน่ใจว่าองค์ประกอบ void ทั้งหมดจะไม่แทรกแท็กปิด
0.11.0 17 กรกฎาคม 2557 ปรับปรุงการรองรับ SVG, ปรับปรุงเหตุการณ์ e.view ให้เป็นมาตรฐาน, อัปเดตคำสั่ง $apply, เพิ่มการรองรับเนมสเปซ, เพิ่ม API transformWithDetails ใหม่, รวมแพ็กเกจที่สร้างไว้ล่วงหน้าไว้ใน dist/, MyComponent() ตอนนี้ส่งคืนตัวอธิบาย ไม่ใช่ตัวอย่าง
0.12.0 21 พฤศจิกายน 2557 เพิ่มฟีเจอร์ใหม่: เพิ่มตัวดำเนินการกระจาย ({...}) เพื่อทดแทน this.transferPropsTo, เพิ่มการรองรับ acceptCharset, classID, คุณสมบัติ HTML ใน manifest, เพิ่ม React.addons.batchedUpdates ใน API, ไม่จำเป็นต้องใช้ @jsx React.DOM อีกต่อไป, แก้ไขปัญหาเกี่ยวกับการเปลี่ยนภาพเคลื่อนไหวด้วย CSS
0.13.0 10 มีนาคม 2558 รูปแบบที่เลิกใช้แล้วซึ่งเคยแจ้งเตือนในเวอร์ชัน 0.12 จะไม่ทำงานอีกต่อไป ลำดับการแก้ไข ref เปลี่ยนไป ลบคุณสมบัติ this._pendingState และ this._rootNodeID ออก รองรับคลาส ES6 เพิ่ม API React.findDOMNode(component) รองรับ iterator และลำดับ immutable-js เพิ่มคุณสมบัติใหม่ React.addons.createFragment และยกเลิกการใช้งาน React.addons.classSet
15.0.0 7 เมษายน 2559 การแสดงผลเริ่มต้นตอนนี้ใช้ document.createElement แทนการสร้าง HTML แล้ว ไม่มี<span>s เพิ่มเติมอีกต่อไป รองรับ SVG ได้ดีขึ้นReactPerf.getLastMeasurements()ทึบแสง มีการแนะนำการเลิกใช้งานใหม่พร้อมคำเตือน แก้ไขปัญหาการรั่วไหลของหน่วยความจำเล็กน้อยหลายจุด React DOM ตอนนี้รองรับแอตทริบิวต์ HTML cite และ profile และคุณสมบัติ CSS cssFloat, gridRow และ gridColumn แล้ว
15.1.0 20 พฤษภาคม 2559 แก้ไขข้อผิดพลาดในการประมวลผลแบบกลุ่ม ตรวจสอบให้แน่ใจว่าได้ใช้ object-assign เวอร์ชันล่าสุด แก้ไขข้อผิดพลาดที่เกิดขึ้นซ้ำ ลบการใช้ยูทิลิตี้การรวม เปลี่ยนชื่อโมดูลบางส่วน
15.2.0 1 กรกฎาคม 2559 เพิ่มข้อมูล stack ของ component, หยุดการตรวจสอบ props ในระหว่างการ mount, เพิ่ม React.PropTypes.symbol, เพิ่มการจัดการ onLoad <link>และ onError ให้กับ<source>element, เพิ่มisRunning()API, แก้ไขปัญหาประสิทธิภาพที่ลดลง
15.3.0 30 กรกฎาคม 2559 เพิ่ม React.PureComponent, แก้ไขปัญหาเกี่ยวกับการเรนเดอร์ฝั่งเซิร์ฟเวอร์แบบซ้อนกัน, เพิ่ม xmlns, xmlnsXlink เพื่อรองรับแอตทริบิวต์ SVG และ referrerPolicy สำหรับแอตทริบิวต์ HTML, อัปเดต React Perf Add-on, แก้ไขปัญหาเกี่ยวกับ ref.
15.4.0 16 พฤศจิกายน 2559 แพ็คเกจ React และการสร้างเบราว์เซอร์ไม่รวม React DOM อีกต่อไป ปรับปรุงประสิทธิภาพการพัฒนา แก้ไขข้อผิดพลาดในการทดสอบเป็นครั้งคราว อัปเดต API batchedUpdates, React Perf และReactTestRenderer.create()อื่นๆ
15.5.0 7 เมษายน 2560 เพิ่ม react-dom/test-utils, ลบ peerDependencies ออก, แก้ไขปัญหาเกี่ยวกับ Closure Compiler, เพิ่มคำเตือนการเลิกใช้งานสำหรับ React.createClass และ React.PropTypes, แก้ไขบั๊กใน Chrome
15.6.0 13 มิถุนายน 2560 เพิ่มการรองรับตัวแปร CSS ในแอตทริบิวต์ style และคุณสมบัติสไตล์ Grid แก้ไขการรองรับ AMD สำหรับส่วนเสริมที่ขึ้นอยู่กับ React ลบการพึ่งพาที่ไม่จำเป็น เพิ่มคำเตือนการเลิกใช้งานสำหรับตัวช่วยสร้าง React.createClass และ React.DOM
16.0.0 26 กันยายน 2560 ปรับปรุงการจัดการข้อผิดพลาดด้วยการแนะนำ "ขอบเขตข้อผิดพลาด" React DOM อนุญาตให้ส่งผ่านแอตทริบิวต์ที่ไม่เป็นมาตรฐาน มีการเปลี่ยนแปลงเล็กน้อยในพฤติกรรมของ setState ลบการสร้าง react-with-addons.js เพิ่ม React.createClass เป็น create-react-class, React.PropTypes เป็น prop-types, React.DOM เป็น react-dom-factories มีการเปลี่ยนแปลงพฤติกรรมของวิธีการกำหนดเวลาและวงจรชีวิต
16.1.0 9 พฤศจิกายน 2560 ยุติการเผยแพร่ Bower, แก้ไขตัวแปรส่วนกลางที่เพิ่มเข้ามาโดยไม่ได้ตั้งใจในการสร้าง UMD, แก้ไขการทำงานของ onMouseEnter และ onMouseLeave, แก้ไขตัวยึดตำแหน่ง <textarea>, ลบโค้ดที่ไม่ได้ใช้งาน, เพิ่มการพึ่งพาใน package.json ที่ขาดหายไป, เพิ่มการสนับสนุนสำหรับ React DevTools
16.3.0 29 มีนาคม 2561 เพิ่ม API บริบทที่ได้รับการสนับสนุนอย่างเป็นทางการใหม่ เพิ่มแพ็กเกจใหม่ ป้องกันลูปไม่สิ้นสุดเมื่อพยายามเรนเดอร์พอร์ทัลด้วย SSR แก้ไขปัญหาเกี่ยวกับ this.state แก้ไขปัญหา IE/Edge
16.4.0 24 พฤษภาคม 2561 เพิ่มการรองรับข้อกำหนด Pointer Events, เพิ่มความสามารถในการระบุ propTypes, แก้ไขการอ่าน context, แก้ไขgetDerivedStateFromProps()การรองรับ, แก้ไขข้อผิดพลาด testInstance.parent, เพิ่มคอมโพเนนต์ React.unstable_Profiler สำหรับวัดประสิทธิภาพ, เปลี่ยนชื่อเหตุการณ์ภายใน
16.5.0 5 กันยายน 2561 เพิ่มการรองรับ React DevTools Profiler, จัดการข้อผิดพลาดในกรณีพิเศษต่างๆ ได้อย่างราบรื่นยิ่งขึ้น, เพิ่ม react-dom/profiling, เพิ่มเหตุการณ์ onAuxClick สำหรับเบราว์เซอร์, เพิ่มฟิลด์ movementX และ movementY ให้กับเหตุการณ์เมาส์, เพิ่มฟิลด์ tangentialPressure และ twist ให้กับเหตุการณ์ตัวชี้เมาส์
16.6.0 23 ตุลาคม 2561 เพิ่มการรองรับ contextType, รองรับระดับความสำคัญ, continuations และ callbacks แบบ wrapped, ปรับปรุงกลไก fallback, แก้ไขปัญหา overlay สีเทาบน iOS Safari, เพิ่มการReact.lazy()รองรับการแบ่งโค้ดสำหรับคอมโพเนนต์
16.7.0 20 ธันวาคม 2561 ปรับปรุงประสิทธิภาพของ React.lazy สำหรับคอมโพเนนต์ที่โหลดแบบ lazy loading, ล้างฟิลด์เมื่อ unmount เพื่อหลีกเลี่ยงการรั่วไหลของหน่วยความจำ, แก้ไขข้อผิดพลาดเกี่ยวกับ SSR, แก้ไขปัญหาประสิทธิภาพที่ลดลง
16.8.0 6 กุมภาพันธ์ 2562 เพิ่ม Hooks, เพิ่มReactTestRenderer.act()ฟังก์ชันReactTestUtils.act()สำหรับการอัปเดตแบบกลุ่ม, รองรับ thenable แบบซิงโครนัสที่ส่งผ่านไปยัง React.lazy(), ปรับปรุง API การเริ่มต้นแบบ lazy ของ useReducer Hook
16.9.0 9 สิงหาคม 2562 เพิ่ม API React.Profilerสำหรับรวบรวมข้อมูลการวัดประสิทธิภาพโดยใช้โปรแกรม ลบ unstable_ConcurrentMode ออก แล้วใช้ unstable_createRoot แทน
16.10.0 27 กันยายน 2562 แก้ไขกรณีพิเศษที่การอัปเดต hook ไม่ได้รับการจดจำ แก้ไขฮิวริสติกสำหรับการกำหนดเวลาที่จะเติมข้อมูล เพื่อไม่ให้เติมข้อมูลผิดพลาดระหว่างการอัปเดต ล้างฟิลด์ไฟเบอร์เพิ่มเติมระหว่างการยกเลิกการเชื่อมต่อเพื่อประหยัดหน่วยความจำ แก้ไขข้อผิดพลาดเกี่ยวกับฟิลด์ข้อความที่จำเป็นใน Firefox เลือกใช้ Object.is แทนการใช้ polyfill แบบอินไลน์เมื่อมีให้ใช้งาน แก้ไขข้อผิดพลาดเมื่อผสมผสานการจัดการ Suspense และการจัดการข้อผิดพลาด
16.11.0 22 ตุลาคม 2562 แก้ไขปัญหาการทำงานซ้ำสองครั้งของแฮนด์เลอร์ mouseenter ภายในคอนเทนเนอร์ React ที่ซ้อนกัน ลบ API ทดลอง unstable_createRoot และ unstable_createSyncRoot ออก (มีให้ใช้งานในช่องทดลองในชื่อ createRoot และ createSyncRoot)
16.12.0 14 พฤศจิกายน 2562 React DOM – แก้ไขปัญหาเอฟเฟกต์แบบพาสซีฟ ( useEffect) ไม่ทำงานในโหมด multi-root app React Is – แก้ไข ปัญหา lazyที่memoประเภทถูกพิจารณาว่าเป็นองค์ประกอบแทนที่จะเป็นคอมโพเนนต์
16.13.0 26 กุมภาพันธ์ 2563 เพิ่มคุณสมบัติใหม่ในโหมด React Concurrent แก้ไขข้อผิดพลาดในไลบรารีหลักของ React และ React Dom
16.14.0 14 ตุลาคม 2563 เพิ่มการรองรับการแปลง JSX รูปแบบใหม่
17.0.0 20 ตุลาคม 2563 "ไม่มีฟีเจอร์ใหม่" ช่วยให้สามารถอัปเดต React จากเวอร์ชันเก่าได้อย่างค่อยเป็นค่อยไป เพิ่ม JSX Transform ใหม่ เปลี่ยนแปลง Event Delegation
18.0.0 29 มีนาคม 2565 React พร้อมกัน, การจัดกลุ่มอัตโนมัติ, คุณสมบัติ Suspense ใหม่, การเปลี่ยนผ่าน, API การเรนเดอร์ฝั่งไคลเอ็นต์และเซิร์ฟเวอร์, พฤติกรรมโหมด Strict ใหม่, Hooks ใหม่[ 76 ]
18.1.0 26 เมษายน 2565 มีการแก้ไขข้อบกพร่องและปรับปรุงประสิทธิภาพมากมาย
18.2.0 14 มิถุนายน 2565 มีการแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพอีกมากมาย
18.3.0 25 เมษายน 2567 เพิ่มคำเตือนเกี่ยวกับการเลิกใช้งานฟีเจอร์ต่างๆ ใน ​​React 19
19.0.0 5 ธันวาคม 2024 การดำเนินการ, ฮุกใหม่ (useActionState, useFormStatus, useOptimistic), API การใช้งาน, ส่วนประกอบฝั่งเซิร์ฟเวอร์, การดำเนินการฝั่งเซิร์ฟเวอร์, การส่ง ref เป็นพร็อพปกติ, การเปรียบเทียบความแตกต่างของการไฮเดรชั่นที่ได้รับการปรับปรุง, API บริบทที่ได้รับการปรับปรุง, ฟังก์ชันการล้างข้อมูลสำหรับ refs, API useDeferredValue ที่ได้รับการปรับปรุง, การสนับสนุนเมตาเดต้าของเอกสาร, การสนับสนุนสไตล์ชีต, การสนับสนุนสคริปต์แบบอะซิงโครนัส, การสนับสนุนการโหลดทรัพยากรล่วงหน้า, การรายงานข้อผิดพลาดที่ได้รับการปรับปรุง และการสนับสนุนองค์ประกอบแบบกำหนดเอง

การออกใบอนุญาต

การเปิดตัว React สู่สาธารณะครั้งแรกในเดือนพฤษภาคม 2013 ใช้Apache License 2.0ในเดือนตุลาคม 2014 React 0.12.00 ได้เปลี่ยนมาใช้ใบอนุญาต BSD 3 ข้อและเพิ่มไฟล์ข้อความ PATENTS แยกต่างหากที่อนุญาตให้ใช้สิทธิบัตรของ Facebook ที่เกี่ยวข้องกับซอฟต์แวร์: [ 77 ]

สิทธิ์การใช้งานที่ได้รับภายใต้ข้อตกลงนี้จะสิ้นสุดลงโดยอัตโนมัติและโดยไม่ต้องแจ้งให้ทราบล่วงหน้า สำหรับผู้ใดก็ตามที่ยื่นข้อเรียกร้องใดๆ (รวมถึงการฟ้องร้อง การกล่าวอ้าง หรือการดำเนินการอื่นๆ) โดยกล่าวหาว่า (ก) มีการละเมิดโดยตรง โดยอ้อม หรือมีส่วนร่วมในการละเมิดสิทธิบัตรใดๆ หรือการชักจูงให้ละเมิดสิทธิบัตร: (i) โดย Facebook หรือบริษัทในเครือหรือบริษัทในเครือย่อยใดๆ ของ Facebook ไม่ว่าข้อเรียกร้องดังกล่าวจะเกี่ยวข้องกับซอฟต์แวร์หรือไม่ (ii) โดยบุคคลใดๆ หากข้อเรียกร้องดังกล่าวเกิดขึ้นทั้งหมดหรือบางส่วนจากซอฟต์แวร์ ผลิตภัณฑ์ หรือบริการใดๆ ของ Facebook หรือบริษัทในเครือหรือบริษัทในเครือย่อยใดๆ ของ Facebook ไม่ว่าข้อเรียกร้องดังกล่าวจะเกี่ยวข้องกับซอฟต์แวร์หรือไม่ หรือ (iii) โดยบุคคลใดๆ ที่เกี่ยวข้องกับซอฟต์แวร์ หรือ (ข) ว่าสิทธิ์ใดๆ ในสิทธิบัตรของ Facebook เป็นโมฆะหรือไม่สามารถบังคับใช้ได้

ข้อกำหนดที่ไม่ธรรมดานี้ก่อให้เกิดข้อโต้แย้งและการถกเถียงในชุมชนผู้ใช้ React เนื่องจากสามารถตีความได้ว่าเป็นการให้อำนาจ Facebook ในการเพิกถอนใบอนุญาตในหลายสถานการณ์ ตัวอย่างเช่น หาก Facebook ฟ้องร้องผู้รับใบอนุญาตและกระตุ้นให้พวกเขาดำเนินการ "อื่นๆ" โดยการเผยแพร่การกระทำดังกล่าวในบล็อกหรือที่อื่น ๆ หลายคนแสดงความกังวลว่า Facebook อาจใช้ข้อกำหนดการยุติสัญญาอย่างไม่เป็นธรรม หรือการรวม React เข้ากับผลิตภัณฑ์อาจทำให้การเข้าซื้อกิจการในอนาคตของบริษัทสตาร์ทอัพมีความซับซ้อนมากขึ้น[ 78 ]

จากผลตอบรับจากชุมชน Facebook ได้ปรับปรุงการให้สิทธิบัตรในเดือนเมษายน 2558 ให้มีความคลุมเครือน้อยลงและอนุญาตมากขึ้น: [ 79 ]

ใบอนุญาตที่ได้รับภายใต้ข้อตกลงนี้จะสิ้นสุดลงโดยอัตโนมัติและโดยไม่ต้องแจ้งให้ทราบล่วงหน้า หากคุณ (หรือบริษัทในเครือ บริษัทร่วม หรือตัวแทนของคุณ) เริ่มต้นโดยตรงหรือโดยอ้อม หรือได้รับผลประโยชน์ทางการเงินโดยตรงในการกล่าวอ้างสิทธิบัตรใดๆ: (i) ต่อ Facebook หรือบริษัทในเครือหรือบริษัทร่วมใดๆ ของ Facebook (ii) ต่อบุคคลใดๆ หากการกล่าวอ้างสิทธิบัตรดังกล่าวเกิดขึ้นทั้งหมดหรือบางส่วนจากซอฟต์แวร์ เทคโนโลยี ผลิตภัณฑ์ หรือบริการใดๆ ของ Facebook หรือบริษัทในเครือหรือบริษัทร่วมใดๆ ของ Facebook หรือ (iii) ต่อบุคคลใดๆ ที่เกี่ยวข้องกับซอฟต์แวร์ [...] "การกล่าวอ้างสิทธิบัตร" คือการฟ้องร้องหรือการดำเนินการอื่นใดที่กล่าวหาว่ามีการละเมิดโดยตรง โดยอ้อม หรือมีส่วนร่วมในการละเมิดสิทธิบัตรใดๆ รวมถึงการเรียกร้องแย้งหรือการเรียกร้องโต้แย้ง[ 80 ]

มูลนิธิซอฟต์แวร์ Apacheพิจารณาว่าข้อตกลงการอนุญาตนี้ไม่สอดคล้องกับนโยบายการอนุญาตของตน เนื่องจาก "ส่งต่อความเสี่ยงไปยังผู้บริโภคปลายทางของซอฟต์แวร์ของเราโดยเอื้อประโยชน์ให้กับผู้ให้อนุญาตมากกว่าผู้รับอนุญาต ซึ่งเป็นการละเมิดนโยบายทางกฎหมายของ Apache ที่เป็นผู้บริจาคสากล" และ "ไม่ใช่ส่วนย่อยของสิ่งที่พบใน [Apache License 2.0] และไม่สามารถอนุญาตต่อเป็น [Apache License 2.0] ได้" [ 81 ]ในเดือนสิงหาคม 2017 Facebook ปฏิเสธข้อกังวลของมูลนิธิ Apache เกี่ยวกับผู้บริโภคปลายทางและปฏิเสธที่จะพิจารณาใบอนุญาตใหม่[ 82 ] [ 83 ]เดือนถัดมาWordPressตัดสินใจเปลี่ยนโครงการ Gutenberg และ Calypso ออกจาก React [ 84 ]

เมื่อวันที่ 23 กันยายน 2017 Facebook ประกาศว่าในสัปดาห์ถัดไปจะอนุญาตให้ใช้ Flow, Jest, React และ Immutable.js ภายใต้ใบอนุญาต MIT มาตรฐาน โดยบริษัทระบุว่า React เป็น "รากฐานของระบบนิเวศซอฟต์แวร์โอเพนซอร์สสำหรับเว็บที่กว้างขวาง" และพวกเขาไม่ต้องการ "ขัดขวางความก้าวหน้าด้วยเหตุผลที่ไม่ใช่ทางเทคนิค" [ 85 ]

เมื่อวันที่ 26 กันยายน 2017 React 16.0.0 ได้รับการเผยแพร่ภายใต้ใบอนุญาต MIT [ 86 ]การเปลี่ยนแปลงใบอนุญาต MIT ยังได้รับการนำกลับมาใช้ในเวอร์ชัน 15.x ด้วย React 15.6.2 [ 87 ]

ดูเพิ่มเติม

หมายเหตุ

บรรณานุกรม

  • Larsen, John (2021). React Hooks ในการใช้งานจริงด้วยโหมด Suspense และ Concurrent . Manning. ISBN 978-1-72004-399-7.
  • Schwarzmüller, Max (1 พฤษภาคม 2018). React – คู่มือฉบับสมบูรณ์ (รวมถึง Hooks, React Router และ Redux) . สำนักพิมพ์ Packt .
  • Wieruch, Robin (2020). เส้นทางสู่การตอบสนอง . Leanpub. ISBN 978-1-72004-399-7.
  • Dere, Mohan (2017-12-21). "วิธีการผสานรวม create-react-app กับไลบรารีทั้งหมดที่คุณต้องการเพื่อสร้างแอปที่ยอดเยี่ยม" . freeCodeCamp . สืบค้นเมื่อ2018-06-14 .
  • Panchal, Krunal (2022-04-26). "การเปรียบเทียบ Angular กับ React อย่างละเอียด" . SitePoint . เก็บถาวรจากต้นฉบับเมื่อ 2023-03-30 . เรียกดูเมื่อ2023-06-05 .
  • Hámori, Fenerec (31 พฤษภาคม 2022). "ประวัติของ React.js บนไทม์ไลน์" . RisingStack . เก็บถาวรจากต้นฉบับเมื่อ 31 พฤษภาคม 2022 . เรียกดูเมื่อ5 มิถุนายน 2023 .
  • Lardinois, Frederic (18 เมษายน 2560). "Facebook ประกาศ React Fiber ซึ่งเป็นการเขียนใหม่ของเฟรมเวิร์ก React" . TechCrunch . สืบค้นเมื่อ31 ธันวาคม 2567 .
  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
  • ตอบสนองบนGitHub
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=React_(software)&oldid=1356015816 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ รีแอค (ซอฟต์แวร์)

React (หรือที่รู้จักกันในชื่อReact.jsหรือReactJS ) เป็นไลบรารี JavaScript สำหรับส่วนหน้าแบบโอเพนซอร์สและฟรี ที่มุ่งเน้นการสร้างส่วนติดต่อผู้ใช้โดยใช้คอมโพเนนต์ ให้ "ราบรื่น"...

การประกาศ

React ยึดมั่นใน กระบวนทัศน์ การเขียนโปรแกรม แบบ ประกาศ [ 15 ] [ 16 ] : นักพัฒนาออกแบบมุมมองสำหรับแต่ละสถานะของแอปพลิเคชัน และ React จะอัปเดตและเรนเดอร์คอมโพเนนต์เมื่อข้อมูลเปลี่ยนแปลง ซึ่งแตกต่างจาก การ เขียน โปรแกรมแบบเชิงคำสั่ง [ 17 ]

ส่วนประกอบ

โค้ด React ประกอบด้วยเอนทิตีที่เรียกว่าคอมโพเนนต์ [ 16 ] : 10–12 คอมโพเนนต์เหล่านี้เป็นแบบโมดูลาร์และสามารถนำกลับมาใช้ใหม่ได้ [ 16 ] : 70 แอปพลิเคชัน React โดยทั่วไปประกอบด้วยคอมโพเนนต์หลายชั้น คอมโพเนนต์จะถูกเรนเดอร์ไปยังองค์ประกอบรากใน DOM โดยใช้ไลบรารี...

ส่วนประกอบการทำงาน

คอมโพเนนต์ฟังก์ชัน ซึ่งประกาศในงาน React Conf 2018 และใช้งานได้ตั้งแต่ React เวอร์ชัน 16.8 จะถูกประกาศด้วยฟังก์ชันที่รับอาร์กิวเมนต์ "props" เพียงตัวเดียวและส่งคืน JSX (JavaScript XML) คอมโพเนนต์ฟังก์ชันสามารถใช้สถานะภายในด้วย useState Hook ได้ [ 20 ]