{"id":702,"date":"2020-08-26T17:32:46","date_gmt":"2020-08-26T10:32:46","guid":{"rendered":"https:\/\/www.marketenterprise.vn\/blog\/?p=702"},"modified":"2021-12-29T18:05:53","modified_gmt":"2021-12-29T11:05:53","slug":"gioi-thieu-ve-react","status":"publish","type":"post","link":"https:\/\/www.marketenterprise.vn\/blog\/gioi-thieu-ve-react.html","title":{"rendered":"1 s\u1ed1 \u0111\u1eb7c \u0111i\u1ec3m c\u01a1 b\u1ea3n c\u1ee7a React"},"content":{"rendered":"<h2>Kh\u00e1i ni\u1ec7m v\u1ec1 React<\/h2>\n<p><span style=\"font-weight: 400;\"><br \/>\nReact \u0111\u01b0\u1ee3c bi\u1ebft \u0111\u1ebfn l\u00e0 th\u01b0 vi\u1ec7n JavaScript gi\u00fap x\u00e2y d\u1ef1ng component UI (giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng) t\u01b0\u01a1ng t\u00e1c d\u1ec5 d\u00e0ng h\u01a1n, c\u00f3 tr\u1ea1ng th\u00e1i v\u00e0 c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng l\u1ea1i \u0111\u01b0\u1ee3c v\u1edbi xu h\u01b0\u1edbng Single Page Application.\u00a0 M\u1ed9t trong nh\u1eefng \u0111\u1eb7c \u0111i\u1ec3m t\u0103ng hi\u1ec7u n\u0103ng cho \u1ee9ng d\u1ee5ng l\u00e0 c\u00f4ng ngh\u1ec7 s\u1eed d\u1ee5ng DOM \u1ea3o (<a href=\"https:\/\/reactjs.org\/docs\/faq-internals.html\" target=\"_blank\" rel=\"noopener\">Virtual DOM<\/a>).<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-703 size-full\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/08\/26114656\/pasted-image-0-1.png\" alt=\"react1\" width=\"681\" height=\"485\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/08\/26114656\/pasted-image-0-1.png 681w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/08\/26114656\/pasted-image-0-1-300x214.png 300w\" sizes=\"auto, (max-width: 681px) 100vw, 681px\" \/><\/p>\n<h2>DOM l\u00e0 g\u00ec?<\/h2>\n<p>DOM (Document Object Model) l\u00e0 th\u01b0 vi\u1ec7n giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng v\u00e0 t\u1ed3n t\u1ea1i d\u01b0\u1edbi d\u1ea1ng tree nodes d\u00f9ng \u0111\u1ec3 qu\u1ea3n l\u00fd, truy xu\u1ea5t, ch\u1ec9nh s\u1eeda t\u1edbi b\u1ea5t k\u00ec ph\u1ea7n t\u1eed n\u00e0o th\u00f4ng qua \u0111\u1ed1i t\u01b0\u1ee3ng g\u1ed1c l\u00e0 document. React s\u1eed d\u1ee5ng DOM \u1ea3o n\u00ean vi\u1ec7c c\u1eadp nh\u1eadt v\u00e0 re-render s\u1ebd th\u1ef1c hi\u1ec7n hi\u1ec7u qu\u1ea3 h\u01a1n khi data c\u00f3 s\u1ef1 thay \u0111\u1ed5i. N\u00f3 so s\u00e1nh, c\u1eadp nh\u1eadt ph\u1ea7n t\u1eed thay \u0111\u1ed5i v\u00e0 ch\u1ec9 render t\u1ea1i component c\u1ea7n thi\u1ebft n\u00ean vi\u1ec7c t\u1ea1o l\u1ea1i r\u1ea5t nhanh kh\u00f4ng \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn hi\u1ec7u su\u1ea5t.<\/p>\n<h2>L\u1ee3i \u00edch khi s\u1eed d\u1ee5ng JSX trong React<\/h2>\n<p><span style=\"font-weight: 400;\">Ngo\u00e0i ra, trong React cho ph\u00e9p nh\u00fang code HTML v\u00e0o trong code JavaScript nh\u1edd JSX. Vi\u1ec7c t\u00edch h\u1ee3p JSX l\u00e0m cho code d\u1ec5 \u0111\u1ecdc h\u01a1n, component d\u1ec5 hi\u1ec3u h\u01a1n\u00a0 m\u00e0 kh\u00f4ng l\u00e0m thay \u0111\u1ed5i ng\u1eef ngh\u0129a c\u1ee7a Javascript. M\u1ed7i bi\u1ec3u th\u1ee9c JSX c\u1ea7n \u0111\u01b0\u1ee3c bao b\u1ecdc b\u1edfi ph\u1ea7n t\u1eed ngo\u00e0i c\u00f9ng (th\u01b0\u1eddng d\u00f9ng th\u1ebb &lt;div&gt;&lt;\/div&gt; \u0111\u1ec3 bao b\u1ecdc). Vi\u1ec7c s\u1eed d\u1ee5ng JSX l\u00e0 kh\u00f4ng b\u1eaft bu\u1ed9c nh\u01b0ng \u0111\u01b0\u1ee3c khuy\u1ebfn kh\u00edch.<\/span><\/p>\n<h2>Application v\u1edbi React<\/h2>\n<p><span style=\"font-weight: 400;\">V\u1edbi React, application \u0111\u01b0\u1ee3c chia th\u00e0nh nhi\u1ec1u components. M\u1ed9t component c\u00f3 th\u1ec3 truy c\u1eadp th\u00f4ng tin qua hai c\u00e1ch: props v\u00e0 state. Ch\u00fang ta c\u00f3 th\u1ec3 xem qua v\u00ed d\u1ee5 sau \u0111\u1ec3 h\u00ecnh dung r\u00f5 h\u01a1n.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">class HelloMessage extends React.Component {\n     render() {\n       return (\n         &lt;div&gt;\n           Hello {this.props.name}\n         &lt;\/div&gt;\n       );\n     }\n    }\n \n    ReactDOM.render(\n     &lt;HelloMessage name=\"Minh\" \/&gt;,\n     document.getElementById('example-app')\n    );\n<\/pre>\n<ul>\n<li style=\"font-weight: 400;\"><i><span style=\"font-weight: 400;\">Output:\u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/i><span style=\"font-weight: 400;\">Hello Minh<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\"><br \/>\nProps \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 truy\u1ec1n th\u00f4ng tin t\u1eeb component n\u00e0y sang component kh\u00e1c. \u0110\u1ec3 xem props c\u1ee7a component c\u00f3 ch\u1ee9a g\u00ec ta s\u1ebd s\u1eed d\u1ee5ng c\u00e2u l\u1ec7nh this.props.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">class Color extends React.Component {\n constructor(props) {\n   super(props);\n   this.state = {color: \"Black\"};\n }\n render() {\n   return (\n     &lt;div&gt;\n       &lt;h1&gt;My favorite color is {this.state.color}&lt;\/h1&gt;\n     &lt;\/div&gt;\n   );\n }\n}\n<\/pre>\n<ul>\n<li style=\"font-weight: 400;\"><i><span style=\"font-weight: 400;\">Output: \u00a0 \u00a0 \u00a0 <\/span><\/i><span style=\"font-weight: 400;\">My favorite color is Black<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Kh\u00e1c v\u1edbi props, state c\u1ee7a component kh\u00f4ng th\u1ec3 truy\u1ec1n \u0111\u01b0\u1ee3c ra ngo\u00e0i. Component s\u1ebd qu\u1ea3n l\u00fd state c\u1ee7a ch\u00ednh n\u00f3. \u0110\u1ec3 truy c\u1eadp state ta s\u1eed d\u1ee5ng c\u00fa ph\u00e1p this.state.name-of-property v\u00e0 thay \u0111\u1ed5i state trong m\u1ed9t component ta s\u1eed d\u1ee5ng h\u00e0m this.setState(). M\u1ed9t component con c\u00f3 th\u1ec3 thay \u0111\u1ed5i state c\u1ee7a component cha b\u1eb1ng c\u00e1ch t\u1eeb cha truy\u1ec1n xu\u1ed1ng cho con m\u1ed9t h\u00e0m callback \u0111\u1ec3 nh\u1eadn d\u1eef li\u1ec7u c\u1eadp nh\u1eadt t\u1eeb component con.<\/span><\/p>\n<h2>T\u00f3m l\u1ea1i<\/h2>\n<p><span style=\"font-weight: 400;\">\u00a0Trong b\u00e0i vi\u1ebft n\u00e0y, m\u00ecnh \u0111\u00e3 \u0111\u1ec1 c\u1eadp \u0111\u1ebfn m\u1ed9t s\u1ed1 \u0111\u1eb7c \u0111i\u1ec3m c\u01a1 b\u1ea3n c\u1ee7a React. Hy v\u1ecdng c\u00e1c b\u1ea1n c\u00f3 c\u00e1i nh\u00ecn t\u1ed5ng qu\u00e1t\u00a0 v\u1ec1 react\u00a0 v\u00e0 c\u00f3 th\u1ec3 \u1ee9ng d\u1ee5ng th\u01b0 vi\u1ec7n React v\u00e0o web application.\u00a0<\/span><\/p>\n<p>Ngo\u00e0i React ra th\u00ec <span>Vue.js<\/span> <span>l\u00e0 m\u1ed9t framework JavaScript cung c\u1ea5p tr\u1ea3i nghi\u1ec7m kh\u00e1 gi\u1ed1ng React. B\u1ea1n c\u00f3 th\u1ec3 t\u00ecm hi\u1ec3u th\u00eam t\u1ea1i b\u00e0i vi\u1ebft <a href=\"https:\/\/www.marketenterprise.vn\/blog\/vuejs-la-gi.html\">VueJS l\u00e0 g\u00ec?<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>M\u1ed9t gi\u1ea3i ph\u00e1p ph\u00f9 h\u1ee3p th\u01b0\u1eddng \u0111\u01b0\u1ee3c t\u00ecm ra b\u1edfi nh\u1eefng ng\u01b0\u1eddi \u0111\u00e3 t\u1eebng g\u1eb7p ph\u1ea3i v\u00e0 hi\u1ec3u \u0111\u01b0\u1ee3c v\u1ea5n \u0111\u1ec1 th\u1ef1c s\u1ef1. Tr\u01b0\u1edbc \u0111\u00e2y, tr\u00ean m\u1ed9t trang web c\u00f3 r\u1ea5t nhi\u1ec1u event \u0111\u01b0\u1ee3c sinh ra t\u1ea1i nhi\u1ec1u khu v\u1ef1c kh\u00e1c nhau nh\u01b0 trang web c\u1ee7a Facebook th\u00ec s\u1ed1 l\u01b0\u1ee3ng d\u00f2ng code s\u1ebd r\u1ea5t nhi\u1ec1u v\u00e0 kh\u00f3 \u0111\u1ec3 maintain. Th\u01b0 vi\u1ec7n React ra \u0111\u1eddi v\u00e0o n\u0103m 2013 d\u01b0\u1edbi s\u1ef1 ph\u00e1t tri\u1ec3n c\u1ee7a Facebook nh\u1eb1m gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 tr\u00ean. Sau \u0111\u00f3, n\u00f3 \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u, ph\u00e1t tri\u1ec3n v\u00e0 ng\u00e0y c\u00e0ng nhi\u1ec1u c\u00f4ng ty tr\u00ean th\u1ebf gi\u1edbi s\u1eed d\u1ee5ng. V\u1eady th\u00ec React c\u00f3 nh\u1eefng \u01b0u \u0111i\u1ec3m v\u01b0\u1ee3t tr\u1ed9i g\u00ec\u00a0 v\u00e0 gi\u1ea3i quy\u1ebft nh\u1eefng v\u1ea5n \u0111\u1ec1 \u0111\u00f3 nh\u01b0 th\u1ebf n\u00e0o? Ch\u00fang ta c\u00f9ng t\u00ecm hi\u1ec3u nh\u00e9!<\/p>\n","protected":false},"author":20,"featured_media":705,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[22],"class_list":["post-702","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-technical"],"_links":{"self":[{"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/posts\/702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/comments?post=702"}],"version-history":[{"count":0,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/posts\/702\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/media\/705"}],"wp:attachment":[{"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/media?parent=702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/categories?post=702"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/tags?post=702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}