React คุ้มไหมต้องเรียนรู้มัน?

เริ่มเรื่องมาจากว่าได้ทำการเรียนรู้สิ่งใหม่เพื่อการเขียนเว็บระหว่างฝึกงาน ซึ่งงานใช้ Laravel กับ React ซึ่ง React นี้ก็ได้ทำการฝึกเขียนและ ในระหว่างที่เขียนบทความนี้ผมก็คงยังไม่ได้เก่งเลย ซึ่งที่ผมพบเบื่อต้น Learning curve ที่สูงมากๆ ซึ่งไม่เหมาะสมกับมือใหม่อย่างแรง ซึ่งผมก็เป็นคนไม่ได้เก่งอะไร เคยเขียนมาเล็กๆน้อย ผมเลยถามเพื่อนๆ พี่ๆ ที่เก่ง React ว่า React นั้นดีไง คุ้มกับการเรียนรู้ไหม ซึ่งก็ตอบข้อดีกลับมาอย่าเยอะเลย ซึ่ง ซึ่งถ้ามามีโอกาสผมจะมาแสดงความคิดเห็นในมุมมองของผม(ทั้งนี้อย่างที่รู้กันทุกอย่างก็ไม่มีทางสมบูรณ์แบบได้หมด) บทความแสดงความคิดเห็นนี้อาจพอมีประโยชน์ต่อผู้ที่จะศึกษา React

งั้นผมมาเริ่มประเด็น และ อธิบายความคิดเห็นของเพื่อนผม ที่มีต่อ React นะครับซึ่งบุคคลเหล่านี้ล้วนแล้วเป็นเด็กวิศวะเกษตร ก็ทำงาน+ฝึกงาน อยู่ใน Wongnai, Taskworld(บริษัทที่ใช้ React) และ อื่นๆ

  1. พี่ไทปัง หรือThai Pangsakulyanont เป็นสไลด์ที่พี่เขาเคยเขียนไว้นะครับ

2. คุณเพื่อนนัท Supanut Apikulvanich

  1. แยกเป็น Component ได้ชัดเจน จัดการได้ง่าย และเป็น SPA
  2. ใช้ javascript กับ syntax html ได้ (JSX) วน for และ if else ได้อย่างสวยงาม :)
  3. มี Tool ดีๆให้ใช้ เช่น Hot reload update style แล้ว save ก็แสดงผลได้เลย โดยที่ state ยังเหมือนเดิมอยู่ ไม่เหมือน refresh หน้าจอใหม่ แล้วเริ่มจากเดิมใหม่หมด
  4. มี React Component Opensource ให้เลือกเยอะมากมาย ใน github
  5. มีขนาดค่อนข้างเล็ก เพราะเป็น library ต่างจาก Angular ที่เป็น framework ซึ่งจะมีครบมากกว่าแต่ขนาดใหญ่ แต่ React ก็มีตัวเลือกให้เอามาใช้ร่วมกันได้เยอะ

3. Chonnipa Kittisiriprasert (จูน)

  • พอเป็น component-based ทำให้เราเข้าใจ ui ง่ายขึ้น เช่นกล่องนึงคือ component นึง
    - jsx ทำให้อ่านโค้ดง่ายขึ้น ดูง่ายดีเวลาสั่ง render เป็น div ไรงี้
    - อ่านโค้ดง่ายก็ maintenance ง่าย
    - เทส ui ง่ายด้วย เพราะสับเป็น component แล้ว
    - ใช้ได้กับหลายๆ framework เพราะ react เป็นแค่ตัวจัดการ ui
    - รองรับ render จาก server ช่วยเรื่อง SEO

4. Chinnabhorn Soonue พี่ชิน

— ตามที่จูนเขียนไว้
- เสริมอีกนิด เท่าที่ลองมา performance ของ react ค่อนข้างดีมากเลยทีเดียว เพราะว่าลำพังแค่ตัว react เองมันเป็นแค่ library ถ้าเราพัฒนาเว็บออกมาดีๆ ใช้ library เสริมเท่าที่จำเป็นเท่านั้น optimize ดีๆ เว็บก็จะออกมาดีงาม performance ของ front-end เร็วปรี๊ดๆ
- จากข้อที่แล้วทำให้มันยืดหยุ่นในการพัฒนาสูงมาก
- แน่นอนต้องแลกมาด้วยการที่ต้องเรียนรู้ library ข้างนอกเยอะเหมือนกัน กว่าจะทำงานออกมาได้สมบูรณ์
- มองว่าเครื่องมือที่ใช้กับ react เขียนได้เป็นหน้าๆที่ช่วยให้มันทำงานได้ง่าย อันนี้คงต้องใช้เวลาในการศึกษากันอีกนาน
- angular 2 ตอนนี้มันทำ server rendering ได้แล้ว แน่นอนมันคือ framework กดๆพิมพ์ๆสองสามที ได้ทุกอย่างแล้ว เพราะมันมีทุกอย่างในนั้นเลย ทั้งที่จำเป็นและไม่จำเป็น แถมเราก็ไม่ได้รู้เลยว่าข้างหลังมาทำงานอะไรยังไง รวมไปถึง performance ของ react ก็ optimize ได้ดีกว่าเยอะ
- angular 2 จะทำอะไรก็ต้องรอมัน update react ไม่ต้อง หา lib มาใช้ได้เลยอย่าได้ช้า
- angular 2 ต้องมานั่งเรียนรู้ syntax เพิ่มเติมเยอะแยะ ngIf ngFor บลาๆๆๆ ทำไปทำไม? react บอกว่า ลำพัง js กับ html ก็ทำได้อยู่แล้ว ไม่เห็นต้องมาทำพวกนั้นเลย บอกเลยว่าหลังๆ angular 2 ขนาดใช้ jade ช่วยแล้ว ทำไง code ก็รกอยู่ดี
- react ถ้าทำออกมาได้ best practice ของมันจริงๆ แบ่ง component ออกได้ย่อยจริงๆ code สวยงาม อ่านง่าย สบายตาแน่นอน
- react มันเกิดมาเพื่อ Isomorphic อยู่แล้ววว (บางคนก็บอกให้เรียก universal) => ก็ไอ server rendering นี่แหละ เอาไว้ทำ SEO
react native 
- ไม่พูดเรื่องข้อดีของมันแต่อธิบายให้ช่วยตัดสินใจดีกว่า
- แชร์ script (บางส่วน) ได้ทั้งสอง platform แต่!!! ถ้า requirement ของ app ต้องใช้ component โน้นนี่เยอะแยะ โหดๆ ที่ react-native ไม่มี ก็จะลำบากหน่อย เพราะต้องเขียน native ทั้งสองฝั่ง
- ถ้าไม่ใช้ react native คงต้อง typescript ของฝั่ง angular แต่เคยลอย typescript ของ angular แล้ว เจอปัญหาเรื่อง memory leak เลยเททิ้งทันที 
- typescript ยังมีปัญหาเยอะ รู้สึกตัวเทสพึ่งจะอัพเดทเวอร์ชั่นใหม่
- ถ้าจะเรียนรู้ react อยู่แล้วก็ใช้ react native ไปเลยมันก็ไม่ต้องไปเรียนรู้อะไรซ้ำซ้อน ไม่จำเป็น
- ที่เหลือรอ Manatsawin Hanmongkolchai ดีก่า
redux
- ทำไมต้อง redux? 
ใน react จะมี state ของแต่ละ component ไอ state เนี่ย มันเอาไว้ควบคุมการแสดงผลของ component นั้นๆ จาก concept ของ react มันจะต้องแตก component เต็มไปหมด ทำให้มีปัญหาตามมาคือ แล้วถ้าต้องการจะจัดการ state ข้าม component หละ? ลองจินตนาการ component มีสัก 10 20 อัน ต้องส่งข้อมูลไปๆมาๆวุ่นวายไปหมด เลยกำเนิดมาเป็น redux 
- redux concept มันจะมี store กลาง เอาไว้เก็บ state ของทั้ง application เราไว้ ทำให้จัดการง๊าย ง่าย
- redux มองง่ายๆก็เป็น 1 ใน lib ที่ช่วยให้ react ทำงานได้ง่ายขึ้นนั่นแหละ
- ตอนนี้ก็ไม่ได้มีแค่ redux หรอกนะที่ช่วยให้แก้ปัญหานี้ได้ จะใช้ตัวอื่นก็ได้ แต่ redux คนใช้เยอะดี เวลามีปัญหาไรก็หาอ่านได้ง่าย
สรุป
ถ้าไม่คิดจะทำสายเว็บหรือศึกษาอะไรเยอะแยะของสายนี้ ไม่ต้อง maintain อะไรมาก เว็บไม่ใหญ่(เพราะถ้าใหญ่ code จะแย่มาก) ไปใช้ angular 2 ดีกว่า framework มันชัดเจนอยู่แล้ว ใช้ง่าย ทำงานง่าย แต่ถ้าจริงจังจะต้อง optimize โน้นนี่เยอะแยะ เพื่อให้ได้งานที่ดีที่สุด + อยากเรียนรู้ เยอะๆ ก็ใช้ react

5. Manatsawin Hanmongkolchai

react มันมี starter pack อะไรของมันอยู่อ่ะ ถ้าอยากลองง่ายๆ ก็ลองดู

ที่ชอบ angular คือมันแก้ปัญหาโค้ดเน่าของ jquery ได้ (เพราะเปิดมาโค้ด jquery จะ bind event รัวๆ) แต่ปัญหาของ angular คือมันไม่มี code reuse นอกจากจะเล่นท่ายาก แต่ react มันทำให้ code reuse เป็นท่าง่าย

ปัญหานึงตอนเรียน react คือถ้าถามคนใช้ react ส่วนมากจะบอกว่าต้องทำ redux ทำ split ให้ component reuse ได้ ซึ่งมันไม่จำเป็น (เหมือนเขียนโค้ดเขียนเชี่ยๆ ก็ได้) ถ้าทำ project แรกๆ แนะนำว่าอย่าไปสนใจ redux ยำๆ ไปเลย สักพักจะเริ่มเห็นปัญหาแล้วค่อยๆ หาทางแก้เอง

6. Aphichan Chaiyutthasart

react native — โค้ดหลักของทั้ง ios android ใช้ร่วมกันได้ มีบาง component ที่แยกกัน ทำให้พัฒนาแอพได้ทั้งสอง os ได้เร็วขึ้น และจัดการง่ายขึ้น ข้อดีของมันคือโค้ดข้างในเป็น native lang จริงๆ ทำให้ performance ดีกว่าพวก cordova ionic phonegap


ทั้งนี้เนื้อหาผิดประการใดก็ขอโทษด้วยครับ ขอบคุณความคิดเห็นของเพื่อนๆและหวังว่าจะมีประโยชน์ต่อใครบ้างครับ