{"id":9871,"date":"2016-05-10T12:14:37","date_gmt":"2016-05-10T15:14:37","guid":{"rendered":"https:\/\/king.host\/blog\/?p=9871"},"modified":"2024-06-04T07:33:43","modified_gmt":"2024-06-04T10:33:43","slug":"iniciando-com-o-react-javascript","status":"publish","type":"post","link":"https:\/\/king.host\/blog\/glossario\/iniciando-com-o-react-javascript\/","title":{"rendered":"Iniciando com o React JavaScript"},"content":{"rendered":"<p>No final deste m\u00eas de abril ocorreu a quinta edi\u00e7\u00e3o do \u201cmais tradicional evento gaud\u00e9rio de javascript do Rio Grande do Sul\u201d. O evento, que conta com o apoio da iniciativa BrazilJS e patroc\u00ednio da KingHost, trouxe uma programa\u00e7\u00e3o focada nas novidades do mundo do Javascript em&nbsp;2016.<\/p>\n<p>Durante o evento, tivemos a oportunidade de assistir oito palestras, tratando de diversos assuntos, entre eles a aplica\u00e7\u00e3o do JavaScript no desenvolvimento de aplica\u00e7\u00f5es de grande porte. Uma tend\u00eancia atual \u00e9 a utiliza\u00e7\u00e3o da biblioteca React 1.<\/p>\n<h3>O que \u00e9 React? Pra que serve?<\/h3>\n<p>React \u00e9 uma biblioteca Javascript open source, desenvolvida pelo Facebook para criar interfaces para aplica\u00e7\u00f5es web.<\/p>\n<p>Ele fornece uma maneira de representar objetos na forma de componentes e gerenciar automaticamente o seu estado. As atualiza\u00e7\u00f5es na interface s\u00e3o autom\u00e1ticas, r\u00e1pidas (virtual DOM), e refletem as modifica\u00e7\u00f5es nas propriedades do objeto. Esses objetos s\u00e3o descritos declarativamente, como componentes reutiliz\u00e1veis, usando uma sintaxe pr\u00f3pria (JSX) &#8211; um dos pontos fortes do React. Os componentes podem ser compostos por outros componentes: os dados fluem em um&nbsp;\u00fanico sentido, propagando mudan\u00e7as de estado para os componentes filhos.<\/p>\n<p><strong>O React n\u00e3o \u00e9 um framework, ele implementa apenas a view do modelo MVC (model-view-controller).<\/strong><\/p>\n<p>Hoje o React \u00e9 usado Usado pelo Facebook, Instagram, NETFLIX, imgur e AirBnB para aplica\u00e7\u00f5es de grande porte.<\/p>\n<h3>O que \u00e9 Virtual DOM?<\/h3>\n<p>DOM \u00e9 um padr\u00e3o de representa\u00e7\u00e3o e intera\u00e7\u00e3o de objetos para documentos HTML. Manipular o DOM normal \u00e9 algo&nbsp;que causa bastante gargalo nas aplica\u00e7\u00f5es web.<\/p>\n<p>O React cria uma representa\u00e7\u00e3o do DOM em mem\u00f3ria, chamada \u201cvirtual DOM\u201d. Quando \u00e9 necess\u00e1rio redesenhar algum elemento na p\u00e1gina, o React calcula as diferen\u00e7as (diff) entre o virtual DOM e a p\u00e1gina, modificando apenas o necess\u00e1rio. \u00c9 muito mais r\u00e1pido de manipular esse pseudo-DOM do que o DOM.<\/p>\n<h3>O que \u00e9 JSX?<\/h3>\n<p>JSX \u00e9 uma extens\u00e3o do javascript que permite escrever componentes com sintaxe XML dentro de arquivos JS. Ele transforma XML em JS. Voc\u00ea n\u00e3o precisa usar JSX para trabalhar com React, mas \u00e9 um atalho bacana. Considere a seguinte express\u00e3o em JSX:<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false lang:js decode:true \">var x = &lt;div&gt;&lt;strong&gt;abcdef&lt;\/strong&gt;&lt;\/div&gt;\n\nEssa mesma express\u00e3o \u00e9 transformada no seguinte trecho em JS:\n\nvar x = React.createElement(\n\n\"div\", null, React.createElement(\n\n\"strong\", null, \"abcdef\"\n\n)\n\n);<\/pre>\n<p>&nbsp;<\/p>\n<p>Essa transforma\u00e7\u00e3o \u00e9 transparente &#8211; as pr\u00f3prias ferramentas de build cuidam disso. No entanto, \u00e9 poss\u00edvel incluir uma vers\u00e3o do compilador JSX escrita em javascript numa p\u00e1gina da web, e trabalhar diretamente com JSX.<\/p>\n<h3>Como eu uso?<\/h3>\n<p>A maneira mais f\u00e1cil de come\u00e7ar com React \u00e9 incluindo a biblioteca em uma tag de &lt;script&gt; no HEAD da sua p\u00e1gina HTML:<\/p>\n<pre class=\"trim-whitespace:false trim-code-tag:false lang:xhtml decode:true \">&lt;!DOCTYPE html&gt;\n\n&lt;html&gt;\n\n&lt;head&gt;\n\n&lt;script src=\"\/\/cdnjs.cloudflare.com\/ajax\/libs\/react\/0.14.6\/react.js\"&gt;&lt;\/script&gt;\n\n&lt;script src=\"\/\/cdnjs.cloudflare.com\/ajax\/libs\/react\/0.14.6\/react-dom.js\"&gt;&lt;\/script&gt;\n\n&lt;\/head&gt;\n\n&lt;body&gt;\n\n&lt;div id=\"meuapp\"&gt;&lt;\/div&gt;\n\n&lt;script&gt;\n\nvar MeuApp = React.createClass({\n\nrender: function() {\n\nreturn &lt;div&gt;M\u00e3e to no react&lt;\/div&gt;;\n\n}\n\n});\n\nReactDOM.render(\n\n&lt;MeuApp \/&gt;,\n\ndocument.getElementById('meuapp')\n\n);\n\n&lt;\/script&gt;\n\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>Na pr\u00e1tica, voc\u00ea vai acabar usando um processo de build tradicional como o grunt, gulp ou mais recentemente, o webpack.<\/p>\n<p>Para saber mais:<\/p>\n<p>\u00b7<a href=\"https:\/\/facebook.github.io\/react\/\" target=\"_blank\" rel=\"noopener\"> https:\/\/facebook.github.io\/react\/<\/a><\/p>\n<p>\u00b7 <a href=\"http:\/\/gruntjs.com\/\" target=\"_blank\" rel=\"noopener\">http:\/\/gruntjs.com\/<\/a><\/p>\n<p>\u00b7 <a href=\"http:\/\/gulpjs.com\/\" target=\"_blank\" rel=\"noopener\">http:\/\/gulpjs.com\/<\/a><\/p>\n<p>\u00b7 <a href=\"https:\/\/webpack.github.io\/\" target=\"_blank\" rel=\"noopener\">https:\/\/webpack.github.io\/<\/a><\/p>\n<p>\u00b7 <a href=\"https:\/\/github.com\/enaqx\/awesome-react\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/enaqx\/awesome-react<\/a><\/p>\n<p>Post escrito pelo colaborador Rodrigo&nbsp;Hahn &#8211;&nbsp;Desenvolvedor na KingHost.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>No final deste m\u00eas de abril ocorreu a quinta edi\u00e7\u00e3o do \u201cmais tradicional evento gaud\u00e9rio de javascript do Rio Grande do Sul\u201d. O evento, que conta com o apoio da iniciativa BrazilJS e patroc\u00ednio da KingHost, trouxe uma programa\u00e7\u00e3o focada nas novidades do mundo do Javascript em&nbsp;2016. Durante o evento, tivemos a oportunidade de assistir [&hellip;]<\/p>\n","protected":false},"author":276,"featured_media":9872,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1308],"tags":[1349],"class_list":["post-9871","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-glossario","tag-java"],"_links":{"self":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/9871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/users\/276"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/comments?post=9871"}],"version-history":[{"count":2,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/9871\/revisions"}],"predecessor-version":[{"id":31420,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/9871\/revisions\/31420"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media\/9872"}],"wp:attachment":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media?parent=9871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/categories?post=9871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/tags?post=9871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}