ืœืžื” React? ๐Ÿ’ก

React ื”ื•ืžืฆืื” ื‘ึพ2011. ืœืคื ื™ ืคื™ืชื•ื— frontend ื”ื™ื” ืขื ืงื‘ืฆื™ js, html, css. ื”ืงื‘ืฆื™ื ื”ื™ื• ื ืฉืœื—ื™ื ืœืฉืจืช.

ื›ืืฉืจ ื”ืžืฉืชืžืฉ ืจืฆื” ืœื‘ืฆืข ืฉื™ื ื•ื™ ื‘ืืชืจ, ื”ื‘ืงืฉื” ื”ื™ื™ืชื” ื ืฉืœื—ืช ืœืฉืจืช ื•ื”ื•ื ื”ื™ื” ืฉื•ืœื— ืงื‘ืฆื™ื ืžืขื•ื“ื›ื ื™ื.

ื”ื‘ืขื™ื” ื”ื™ื ืฉื™ืฉ ืžืกืคืจ ืกื•ื’ื™ื ืฉืœ ื“ืคื“ืคื ื™ื, ื•ืœื›ืœ ื“ืคื“ืคืŸ ื”ื’ื“ืจื•ืช ืฉื•ื ื•ืช. ืœื›ืŸ ืืชืจ ืฉื ื‘ื ื” ืขื ืงื•ื“ js ืœื“ื•ื’ืžื” ืื—ื“ ื™ื›ื•ืœ ืœื”ืชืื™ื ืืชืจ ื—ืœืง, ืื‘ืœ ืœื ืืช ื›ื•ืœื.

ื›ื“ื™ ืœื”ืชืื™ื ืืช ื”ืงื•ื“ ืœื›ืœ ื”ื“ืคื“ืคื ื™ื, ืขื•ื“ ืกื™ื‘ื” ื”ื™ื ืฉืืชืจื™ื ื”ื™ื• ืฆืจื™ื›ื™ื ืœื”ื™ื˜ืขืŸ ื‘ื–ืžืŸ ืืžืช, ืืชืจื™ื ื›ืžื• Facebook ืื• Airbnb.

ืœื›ืŸ ืื™ ืืคืฉืจ ืœืขื‘ื•ื“ ื‘ื“ืจืš ื™ืขื™ืœื” ื›ืš. ื‘ื”ืžืฉืš ื”ื•ืฆืข jQuery ืฉื™ืฉ ืœื• api ื•ืืคืฉืจ ืœื”ืœื—ื™ืฅ ืืช ื”ืืชืจ ื•ืœืขื“ื›ืŸ.

ืขื ื”ืืคืฉืจื•ืช ื”ื–ื• ืžืคืชื—ื™ื ื”ืชื—ื™ืœื• ืœืคืชื— ืืชืจื™ื ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื™ื ื›ืžื• ืคื™ื™ืกื‘ื•ืง ืฉืืœื• ืจื›ื™ื‘ื™ื ืฉืžื‘ื•ืกืกื™ื ืขืœ jQuery.

ืืš ืงื‘ืฆื™ js ื”ืคื›ื• ืœื”ื™ื•ืช ื’ื“ื•ืœื™ื ื™ื•ืชืจ ื•ื™ื•ืชืจ. ื•ื”ืžืฉืชืžืฉ ืžืงื‘ืœ ืจืง ืขื•ื“ ื“ืคื™ื. ื‘ืžืงื•ื ื‘ืœื•ื’ ืฉื”ืืชืจ ื ืฉืืจ ื‘ืžืงื•ื ื™ืฉ ืขื“ื›ื•ืŸ ื—ืœืงื™ ืฉืœ DOM.

ื›ืชื•ืฆืื” ืžื›ืš ื ื•ืœื“ื• ืกืคืจื™ื•ืช ื›ืžื• BACKCOBS ืฉืžืืคืฉืจื•ืช ื™ื•ืชืจ ืžื•ื“ืœ SPA (Single Page Application) โ€“ ื˜ืขื™ื ื” ื—ื“ึพืคืขืžื™ืช ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ื•ื›ืœ ื”ืขื“ื›ื•ืŸ ื ืขืฉื” ื‘ืฆื“ึพืœืงื•ื—.

React - ื”ืฆื’ืช ืฆื“ ืœืงื•ื—

ื›ื›ืœ ืฉื”ืืชืจื™ื (ื›ืžื• Airbnb ื•-Facebook) ื”ืคื›ื• ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื™ื ื™ื•ืชืจ, ื”ื™ื” ืฆื•ืจืš ืœื”ื—ืœื™ืฃ ืชื›ื ื™ื ื‘ื–ืžืŸึพืืžืช ื•ืœื ื ื™ืชืŸ ื”ื™ื” ืœืขื‘ื•ื“ ื‘ื™ืขื™ืœื•ืช ื‘ืฉื™ื˜ื” ื”ื™ืฉื ื”.

jQuery ื”ื•ืฆืขื” ื›ืขื–ืจื” ืœืžื ื™ืคื•ืœืฆื™ื•ืช DOM ื‘ื›ืœ ื“ืคื“ืคืŸ, ืืš ืงื‘ืฆื™ JS ื”ืชื ืคื—ื• ื•ื”ืคื›ื• ืœึพSpaghetti Code. ื ื•ืœื“ื• ืกืคืจื™ื•ืช ื›ืžื• BACKCOBS ื•ืžืื•ื—ืจ ื™ื•ืชืจ ืžื•ื“ืœ SPA โ€“ ื˜ืขื™ื ื” ื—ื“ึพืคืขืžื™ืช ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ื•ื›ืœ ื”ืขื“ื›ื•ืŸ ื ืขืฉื” ื‘ืฆื“ึพืœืงื•ื—.

ื‘ึพ2010 ื’ื•ื’ืœ ื”ืฉื™ืงื” ืืช AngularJS โ€“ ื—ืœื•ืงื” ืœืงื•ืžืคื•ื ื ื˜ื•ืช, ื ื•ื—ื” ืœืฆื•ื•ืชื™ื ื’ื“ื•ืœื™ื, ืืš ื›ื›ืœ ืฉื”ืืคืœื™ืงืฆื™ื” ื’ื“ืœื”, ืจื›ื™ื‘ื™ื ื”ืฉืคื™ืขื• ื–ื” ืขืœ ื–ื” ื•ื ื•ืฆืจ ื‘ืœื’ืŸ ื‘ืžื ื™ืคื•ืœืฆื™ื•ืช DOM.

ื‘ึพFacebook ื”ื—ืœื™ื˜ื• ืœืคืชื— ืืจื›ื™ื˜ืงื˜ื•ืจื” ื—ื“ืฉื”: ื‘ึพ2011 Jorden Walke ื™ืฆืจ ืืช React. ื‘ึพ2013 ืฉื•ื—ืจืจื” ื›ืงื•ื“ ืคืชื•ื—, ื•ื‘ึพ2015 ื’ื•ื’ืœ ื”ืฉื™ืงื” ืืช Angular 2 (ื”ึพRe-Write ืฉืœื”) โ€“ ืขื™ื“ืŸ Frameworks ืžื•ื“ืจื ื™ื™ื ื”ื—ืœ.

โš–๏ธ React vs Vanilla JS

ื‘-Vanilla JS ืื ื—ื ื• ื›ื•ืชื‘ื™ื ืงื•ื“ ืื™ืžืคืจื˜ื™ื‘ื™ ื•ื ื•ื’ืขื™ื ื™ืฉื™ืจื•ืช ื‘-DOM. ื‘ืงื•ื“ ื’ื“ื•ืœ ืงืฉื” ืœืขืงื•ื‘ ืื—ืจ ื”ืžื“ื™ื ื” (State) ื•ื”ืชืจื—ืฉื•ื™ื•ืช. React ืœืขื•ืžืช ื–ืืช ืžืฆื™ืขื” ื’ื™ืฉื” ื“ืงืœืจื˜ื™ื‘ื™ืช ื•ื”ืจื›ื™ื‘ ืžืชืขื“ื›ืŸ ืื•ื˜ื•ืžื˜ื™ืช ืœืคื™ ื”ืฉื™ื ื•ื™ื™ื ื‘ึพstate.

React vs Vanilla

ืžื” ื ืœืžื“

๐ŸŽ“ ื›ืืŸ ืชืžืฆืื• ืืช ื›ืœ ื”ื“ื•ื’ืžืื•ืช ื•ื”ืคืจื•ื™ืงื˜ื™ื ื‘ื›ืœ ื”ืงื˜ื’ื•ืจื™ื•ืช โ€“ ืžื›ืœ ื”ืชื—ื•ืžื™ื ื•ื”ื ื•ืฉืื™ื ืฉื‘ืœื™ืžื•ื“ React.

Portfolio Project Image

JSX ื•ืจื›ื™ื‘ื™ื ืจืืฉื•ื ื™ื

ืžื‘ื•ื ืœึพReact: ื™ืฆื™ืจืช ืจื›ื™ื‘ื™ื ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื ืขื JSX, ืฉื™ืžื•ืฉ ื‘ึพprops, ืจื™ื ื“ื•ืจ ื“ื™ื ืืžื™ ืฉืœ ืชื•ื›ืŸ.

Portfolio Project Image

ื ื™ื”ื•ืœ ืžืฆื‘ ื•ืื™ืจื•ืขื™ื

ืฉื™ืžื•ืฉ ื‘ึพuseState, ื ื™ื”ื•ืœ ืื™ืจื•ืขื™ื (onClick, onChange) ื•ื™ืฆื™ืจืช ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืžืฉืชืžืฉ.

Portfolio Project Image

React Router

ืฉื™ืžื•ืฉ ื‘ึพreact-router-dom ืœื ื™ื•ื•ื˜ ื‘ื™ืŸ ืขืžื•ื“ื™ื: Routes, Link, useParams, useNavigate.

Portfolio Project Image

ื˜ืคืกื™ื ื•ื‘ืงืจื” ืขืœ ืงืœื˜

ื™ืฆื™ืจืช ื˜ืคืกื™ื ืขื ื‘ืงืจื” ืžืœืื”, ื•ืœื™ื“ืฆื™ื” ื‘ืกื™ืกื™ืช ื•ืฉื™ืžื•ืฉ ื‘ึพcontrolled components.

Portfolio Project Image

ืฆืจื™ื›ืช API ื•ื”ืฆื’ืช ื ืชื•ื ื™ื

ืฉื™ืžื•ืฉ ื‘ึพfetch ืื• axios ืœืฆืจื™ื›ืช ืžื™ื“ืข ื—ื™ืฆื•ื ื™ ื•ื”ืฆื’ืช ื ืชื•ื ื™ื ื‘ืจื›ื™ื‘ื™ื.

Portfolio Project Image

ื ื™ื”ื•ืœ ืžืฆื‘ ื’ืœื•ื‘ืœื™ ืขื Context

ืฉื™ืชื•ืฃ ื ืชื•ื ื™ื ื‘ื™ืŸ ืจื›ื™ื‘ื™ื ืฉื•ื ื™ื ื‘ืขื–ืจืช React Context ื•ึพuseContext.

Portfolio Project Image

ืžื•ื ื” ืงืœื™ืงื™ื ืขื useState

ืคืจื•ื™ืงื˜ ื‘ืกื™ืกื™ ื”ืžื“ื’ื™ื ืื™ืš ืœื™ืฆื•ืจ ื•ืœื”ืฆื™ื’ ืžื•ื ื” ื‘ืขื–ืจืช useState.

Portfolio Project Image

ื˜ื™ื™ืžืจ ืื•ื˜ื•ืžื˜ื™ ืขื useEffect

ืคืจื•ื™ืงื˜ ืฉืžืจื™ืฅ ื˜ื™ื™ืžืจ ืื• ืงืจื™ืืช API ื›ืฉืžืขืœื™ื ืืช ื”ืจื›ื™ื‘, ืขื ื ื™ืงื•ื™ ื ื›ื•ืŸ.

Portfolio Project Image

ืคื•ืงื•ืก ืขืœ ืฉื“ื” ืงืœื˜ ืขื useRef

ืฉื™ืžื•ืฉ ื‘ึพuseRef ืœื”ืคื ื™ื™ืช ืคื•ืงื•ืก ืœืฉื“ื” ืงืœื˜ ืื• ืžื“ื™ื“ืช ื’ื•ื‘ื” ืจื›ื™ื‘.

Portfolio Project Image

ื ื™ื”ื•ืœ ืขื’ืœืช ืงื ื™ื•ืช ืขื useReducer

ื”ื“ื’ืžื” ืฉืœ ื ื™ื”ื•ืœ ืžืฆื‘ื™ื ืžื•ืจื›ื‘ื™ื โ€“ ื”ื•ืกืคื”/ื”ืกืจื” ืฉืœ ืคืจื™ื˜ื™ื ื‘ืขื’ืœื”.

Portfolio Project Image

ืžื ื™ืขืช ื—ื™ืฉื•ื‘ ืžื™ื•ืชืจ ืขื useMemo

ื—ื™ืฉื•ื‘ ืกืš ืกื›ื•ื ืจืง ื›ืืฉืจ ืื—ื“ ืžื”ืขืจื›ื™ื ืžืฉืชื ื” โ€“ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”.

Portfolio Project Image

ืฉืžื™ืจื” ืขืœ ืคื•ื ืงืฆื™ื” ืงื‘ื•ืขื” ืขื useCallback

ื”ืขื‘ืจืช ืคื•ื ืงืฆื™ื•ืช ื›ึพprops ืžื‘ืœื™ ืœื’ืจื•ื ืœืจื™ื ื“ื•ืจ ืžื™ื•ืชืจ ืฉืœ ืจื›ื™ื‘ื™ื.

Portfolio Project Image

ืžื“ื™ื“ืช ืจื›ื™ื‘ ืœืคื ื™ ืจื™ื ื“ื•ืจ

ื”ื“ื’ืžื” ืžืชื™ ืœื”ืฉืชืžืฉ ื‘ึพuseLayoutEffect ื•ืœื ื‘ึพuseEffect.

Portfolio Project Image

ืฉื“ื•ืช ื˜ื•ืคืก ืขื useId

ื™ืฆื™ืจืช ืžื–ื”ื™ื ื™ื™ื—ื•ื“ื™ื™ื ืœื˜ืคืกื™ื ื“ื™ื ืžื™ื™ื ื‘ืฆื•ืจื” ื ื’ื™ืฉื” ื•ื ื›ื•ื ื”.