ค้นหาเว็บไซต์

reactjs - ความแตกต่างระหว่าง Next.js และ Create React App คืออะไร?


ฉันกำลังพยายามเข้าใจความแตกต่างระหว่าง Next.js กับ Create React App (CRA) ฉันรู้ว่าทั้งสองถูกสร้างขึ้นมาเพื่อทำให้ชีวิตของเราง่ายขึ้นในการพัฒนาแอปหน้าสำหรับผู้ใช้โดยใช้ React

หลังจากสำรวจบทความบางส่วนบน Google ฉันพบว่าความแตกต่างหลักคือ

Next.js ให้การเรนเดอร์ฝั่งเซิร์ฟเวอร์ (SSR) ขณะที่ Create React App ให้การเรนเดอร์ฝั่งลูกค้า (CSR) และ SSR ช่วยปรับปรุงประสิทธิภาพการโหลดแอปพลิเคชัน

แต่แล้วพารามิเตอร์อื่น ๆ จากมุมมองการพัฒนาล่ะ อย่างเช่นต่อไปนี้?

  • การบำรุงรักษาและการปรับขยายของเว็บแอปพลิเคชันที่พัฒนาด้วย Next.js หรือ CRA

  • การสนับสนุน TypeScript และ React hooks/Redux

นี่เป็นการเปรียบเทียบที่ผิดหรือไม่?

คำตอบ #1

ผมได้ใช้ทั้ง NextJs และ CRA ทั้งสองเฟรมเวิร์กนี้สามารถใช้เริ่มต้นได้อย่างรวดเร็วและให้ประสบการณ์การพัฒนาที่ดี อย่างไรก็ตาม ทั้งสองนี้มีกรณีการใช้งานที่แต่ละอย่างเด่นกว่าอีกอย่าง ผมจะลองเปรียบเทียบพวกมันตามปัจจัยบางอย่างเหล่านี้ สามารถแนะนำการแก้ไขเพิ่มเติมหรือความคิดเห็นเพิ่มเติมได้ตามสะดวก

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

CRANext.js
CRA ไม่รองรับ SSR โดยตรง
อย่างไรก็ตาม คุณยังสามารถตั้งค่าได้
เพียงแต่มันต้องใช้ความพยายามมากขึ้นในการตั้งค่า SSR กับเซิร์ฟเวอร์และการกำหนดค่าที่คุณต้องการ ทีมพัฒนาซอฟต์แวร์ไม่มีแผนที่จะรองรับสิ่งนี้ในอนาคตอันใกล้ พวกเขาแนะนำเครื่องมืออื่นสำหรับกรณีการใช้งานนี้
NextJs มีประเภทต่าง ๆ สำหรับ SSR รองรับ SSR โดยตรง
* การสร้างแบบคงที่: ดึงข้อมูลในขณะสร้าง นี่เหมาะที่สุดสำหรับกรณีการใช้งานเช่นบล็อกหรือเว็บไซต์แบบคงที่
* การเรนเดอร์ฝั่งเซิร์ฟเวอร์: ดึงข้อมูลและเรนเดอร์สำหรับแต่ละคำร้องขอ คุณต้องทำสิ่งนี้เมื่อคุณต้องการให้บริการมุมมองที่ต่างกันสำหรับผู้ใช้ที่ต่างกัน

ความสามารถในการปรับแต่ง

ฉันคิดว่านี่คือจุดที่เครื่องมือเหล่านี้แตกต่างกันอย่างมากและการตัดสินใจของคุณสามารถขึ้นอยู่กับปัจจัยนี้

CRANext.js
Create React App ไม่ให้คุณมีพื้นที่มากนักในการปรับแต่งการตั้งค่า
การตั้งค่าเช่น webpack config จะไม่สามารถเปลี่ยนแปลงได้ เว้นแต่
คุณจะเบี่ยงออกจากวิธีปกติของ CRA (eject, rescripts, rewired, craco)
โดยพื้นฐานแล้ว คุณต้องใช้สิ่งที่ถูกตั้งค่าใน
react-scripts ซึ่งเป็นแกนกลางของ CRA
เกือบทุกอย่างสามารถกำหนดค่าได้
หากคุณตรวจสอบตัวอย่างเทมเพลต NextJs คุณจะเห็นไฟล์เช่น
babelrc, jest.config, eslintrc เป็นต้น
ที่คุณสามารถกำหนดค่าได้

ความสามารถในการบำรุงรักษา

สำนักงานด้านรายได้ของแคนาดาNext.js
CRA มีความเห็นเป็นของตัวเองมาก
ถ้าคุณติดตามการอัปเดตของการปล่อยเวอร์ชัน CRA อยู่เสมอ มันก็ไม่ยากที่จะบำรุงรักษา
NextJs ก็ได้รับการดูแลอย่างดีเช่นกัน พวกเขาปล่อยอัปเดตอย่างสม่ำเสมอ

ไทป์สคริปต์

CRANext.js
รองรับทันทีโดยไม่ต้องปรับแต่งอะไรเพิ่มเติม คุณสามารถเริ่มต้นแอป CRA ด้วย TypeScript ได้ด้วย
npx create-react-app my-app --template typescript
รองรับ TypeScript โดยตรง
เริ่มต้นด้วยการตั้งค่าสำหรับ TypeScript โดยใช้ touch tsconfig.json

รองรับ Hooks

เวอร์ชันล่าสุดของทั้ง CRA และ NextJs จะติดตั้งเวอร์ชันของ React ที่รองรับ hooks คุณยังสามารถอัปเกรดเป็นเวอร์ชันล่าสุดได้อย่างง่ายดาย


รองรับ Redux

Redux เป็นไลบรารีที่คุณสามารถใช้กับเครื่องมือทั้งสองนี้ได้

คำตอบ #2

Create React App เป็นเพียงเครื่องมือสร้างโปรเจกต์ React เพื่อช่วยให้คุณตั้งค่าโปรเจกต์ React ได้อย่างรวดเร็ว หลังจากเรียกใช้สคริปต์ CRA npx create-react-app <appname> คุณจะได้แอปพลิเคชันแบบหน้าเดียวที่สวยงามและสะอาดที่สามารถรันได้ หลังฉากคุณยังได้สิ่งต่างๆ เช่น babel, eslint, jest, webpack ที่ตั้งค่าไว้แล้ว จึงเป็นวิธีที่สะดวกจริงๆ ในการเริ่มพัฒนา React และในกรณีที่คุณต้องการการควบคุมนโยบายของเครื่องมือเหล่านั้นมากขึ้น คุณยังสามารถใช้ npm run eject ได้

Next.js ในทางกลับกัน เป็นเฟรมเวิร์กที่สร้างบน React สำหรับการสร้างแอปเซิร์ฟเวอร์ Node.js ซึ่งหมายความว่าคุณจะใช้ตรรกะแบบองค์ประกอบเหมือนกันในการสร้างหน้าเว็บและใช้ประโยชน์จากเอนจินการนำทางของ Next.js สำหรับการนำทางระหว่างหน้า การเรนเดอร์ฝั่งเซิร์ฟเวอร์จะช่วยให้เวลาการโหลดกระจายไปในช่วงเวลามากขึ้น ดังนั้นประสิทธิภาพที่รับรู้จะน่าจะดีกว่า Redux ก็สามารถใช้ได้เช่นกัน แต่จะมีขั้นตอนเพิ่มเติมบางอย่างเพื่อให้ทำงานได้อย่างถูกต้อง (ดูที่ https://github.com/kirill-konshin/next-redux-wrapper)

คอมโพเนนต์, JSX, การสนับสนุน TypeScript, React hooks และทุกแง่มุมหลักอื่น ๆ ของ React จะได้รับการสนับสนุนไม่ว่าจะเลือกแบบใด ดังนั้น คุณสามารถคาดหวังระดับการบำรุงรักษาที่คล้ายกันได้ อย่างไรก็ตาม ความสามารถในการปรับขนาดขึ้นอยู่กับการเลือกของคุณ: หากคุณเลือก Next.js คุณจะต้องโฮสต์แอปบนโครงสร้างพื้นฐานของเซิร์ฟเวอร์ซึ่งควรปรับขนาดตามผู้ชมของคุณ ในขณะที่ React bundle ที่สร้างด้วย CRA เพียงแค่ต้องโฮสต์แบบสแตติกที่ใดที่หนึ่ง

คำตอบ #3

สรุปย่อ

ความแตกต่างที่ใหญ่ที่สุดคือวัตถุประสงค์ของทั้งสองโปรเจกต์ NextJS : JAM Stack หรือ Static Site Generator Create React App : เป็นวิธีที่ได้รับการสนับสนุนอย่างเป็นทางการในการสร้างแอปพลิเคชัน React แบบหน้าเดียว

คำอธิบาย:

ปัญหานี้เป็นเรื่องจริงสำหรับหลายโครงการโอเพนซอร์ส ดูเหมือนจะเป็นทางเลือกของกันและกัน แต่พวกเขามีความแตกต่างที่สำคัญ ตัวอย่างเช่น ในกรณีนี้ แม้ว่าโครงการทั้งสองจะใช้ ReactJS เป็นส่วนหน้าและสร้างเว็บแอป แต่ปัญหาที่พวกเขาแก้นั้นแตกต่างกันมาก มีฟีเจอร์ ธีม/เทมเพลต ใน js ที่ซ้อนทับกันอยู่บ้าง แต่การพัฒนาและงานในอนาคตจะมุ่งไปที่การปรับปรุงโครงการเพื่อช่วยแก้ปัญหาเหล่านั้นให้ดียิ่งขึ้น

เช่น NextJS จะพยายามรวมหากมีคุณสมบัติใหม่ของ Markdown ที่พัฒนาขึ้น ซึ่งจะไม่เกิดขึ้นใน CreateReactApps

ข้อเสนอแนะ

จากคำถามของคุณ ดูเหมือนว่าคุณกำลังมองหาโครงการเหล่านี้เพื่อพัฒนาแอป React Native ดังนั้นฉันจะแนะนำให้ใช้ Create React App

การเปรียบเทียบของคุณควรเน้นหลัก ๆ ว่าโครงการนี้สอดคล้องกับปัญหาที่ฉันกำลังแก้ไขหรือไม่ จากนั้นเปรียบเทียบความสามารถในการบำรุงรักษา ความสามารถในการขยาย การรองรับ Typescript และ React Hooks/Redux

ในกรณีที่ต้องการข้อมูลเพิ่มเติม โปรดคอมเมนต์

บทความที่เกี่ยวข้อง