{"id":11583,"date":"2021-01-07T10:29:02","date_gmt":"2021-01-07T13:29:02","guid":{"rendered":"https:\/\/geekblogti.wpengine.com\/?p=11583"},"modified":"2024-10-29T11:26:10","modified_gmt":"2024-10-29T14:26:10","slug":"redux-um-tutorial-pratico-e-simples","status":"publish","type":"post","link":"https:\/\/www.geekhunter.com/pt/blog\/redux-um-tutorial-pratico-e-simples\/","title":{"rendered":"Redux: Um tutorial pr\u00e1tico e simples!"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">Vamos falar um pouco sobre o que \u00e9 o Redux, e o problema que ele veio resolver, abordando alguns dos seus conceitos centrais.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O principal objetivo \u00e9 dar um norte para aqueles que est\u00e3o come\u00e7ando com o Redux. Por isso, neste artigo, a aplica\u00e7\u00e3o do Redux nos c\u00f3digos exemplificadores ser\u00e1 simples.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A par da teoria, vamos \u00e0 pr\u00e1tica, onde teremos uma exemplifica\u00e7\u00e3o da utiliza\u00e7\u00e3o geral do Redux para gerenciamento e compartilhamento dos estados da aplica\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Primeiramente, um requisito importante \u00e9 que voc\u00ea tenha conhecimentos b\u00e1sicos do <strong><a href=\"https:\/\/www.geekhunter.com/pt/blog\/criando-componentes-react-componentes-de-classe-e-funcional-sem-estado\/\" target=\"_blank\" rel=\"noreferrer noopener\">ReactJs<\/a><\/strong>, uma biblioteca com cara de framework popular na comunidade dev (e que eu particularmente gosto muito).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E ainda, no final, deixarei um projeto TODOLIST com aplica\u00e7\u00e3o do Redux o com conceitos um pouco mais avan\u00e7ados prontinho para voc\u00ea baixar e executar na sua m\u00e1quina.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quer mais? Farei algumas recomenda\u00e7\u00f5es de cursos para voc\u00ea aprofundar e dominar de vez essa library t\u00e3o importante.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-o-que-o-redux\">O que \u00e9 o Redux?<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Redux \u00e9 um container para controle e gerenciamento<\/strong> de estado global de aplica\u00e7\u00f5es JavaScript baseado na arquitetura Flux (tem o prop\u00f3sito de solucionar o problema de compartilhamento de estados entre componentes, tornando-o unidirecional).<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>Entenda a Arquitetura <a href=\"https:\/\/geekblogti.wpengine.com\/flux\/\" target=\"_blank\" rel=\"noreferrer noopener\">Flux<\/a> com React<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ele foi criado em 2015 por Dan Abramov e Andrew Clark, visando resolver o problema de compartilhamento e desencadeamento de eventos entre os componentes da sua aplica\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Redux \u00e9 uma solu\u00e7\u00e3o para compartilhamento de estados entre v\u00e1rios componentes diferentes, tornando isso muito f\u00e1cil, previs\u00edvel e r\u00e1pido.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bastante comum sua utiliza\u00e7\u00e3o com o <a href=\"https:\/\/geekblogti.wpengine.com\/um-guia-para-usar-react-js\/\" target=\"_blank\" rel=\"noreferrer noopener\">React<\/a>, uma biblioteca muito popular (ou framework, ainda existe uma discuss\u00e3o sobre isso) para constru\u00e7\u00e3o de interfaces, uma vez que essa biblioteca foi criada pensando no ReactJs, mas pode ser utilizada com Angular e Vue tamb\u00e9m.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Uma aplica\u00e7\u00e3o sem o Redux \u00e9 obrigada a desencadear eventos entre v\u00e1rios componentes<\/strong>, tornando-os fortemente acoplados, isso dificulta a manuten\u00e7\u00e3o do projeto, uma vez que um componente pode depender de diversos outros para funcionar.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A imagem abaixo ilustra bem o problema e a solu\u00e7\u00e3o que o redux oferece.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"500\" height=\"315\" class=\"wp-image-11587\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2021\/01\/o-que-e-redux.png\" alt=\"como-funciona-redux\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/o-que-e-redux.png 500w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/o-que-e-redux-150x95.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/o-que-e-redux-100x63.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/o-que-e-redux-450x284.png 450w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Simples, n\u00e3o? Agora vamos aos conceitos.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-conceitos-centrais-do-redux\">Conceitos Centrais do Redux<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O redux possui tr\u00eas conceitos centrais: store, reducers e actions.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-store\">Store<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 um container imut\u00e1vel, isto \u00e9, n\u00e3o h\u00e1 altera\u00e7\u00e3o dele, e sim evolu\u00e7\u00e3o, que armazena e centraliza o estado global da aplica\u00e7\u00e3o. Com isso, podemos dizer que \u00e9 o conjunto de estados da aplica\u00e7\u00e3o centralizados\/reunidos em um apenas um lugar.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Store segue um dos princ\u00edpios que formam e definem o conceito do Redux: <strong>Um \u00fanico ponto de verdade.<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os outros s\u00e3o:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Imutabilidade do estado:<\/strong> o estado da aplica\u00e7\u00e3o \u00e9 inalter\u00e1vel, mas \u00e9 evolu\u00edvel.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Altera\u00e7\u00f5es s\u00e3o realizadas apenas por fun\u00e7\u00f5es puras: <\/strong>reducers recebem as actions emitidas aplicando-as ao estado global. Sempre retornando um estado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Tecnicamente, \u00e9 um objeto JavaScript que possui todos os estados dos componentes da aplica\u00e7\u00e3o. Al\u00e9m disso, a store possui a fun\u00e7\u00e3o de monitorar as mudan\u00e7as e notificar os que precisam saber delas.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-reducers\">Reducers<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Reducers s\u00e3o fun\u00e7\u00f5es puras (fun\u00e7\u00f5es que n\u00e3o geram efeitos colaterais, isto \u00e9, para a mesma entrada, temos a mesma sa\u00edda) com a capacidade de disparar eventos e que podem alterar um atributo da store, evoluindo o estado global da aplica\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Funcionam como filtros recebendo e tratando as informa\u00e7\u00f5es, enviando essas informa\u00e7\u00f5es \u00e0 store. \u00c9 encarregado de lidar com todas as a\u00e7\u00f5es, como algum componente pedindo para alterar algum dado da store, por exemplo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para todo dado contido na store, deve existir um reducer pr\u00f3prio daquele dado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Tecnicamente, reducer \u00e9 uma fun\u00e7\u00e3o JavaScript que recebe o estado anterior, ou um estado definido com padr\u00e3o no seu par\u00e2metro, e uma action e, dependendo do <em>type <\/em>dessa action pode gerar um novo estado, o que implica que nem sempre teremos evolu\u00e7\u00e3o do estado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ent\u00e3o, dentro dos reducers, temos as actions.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Todo reducer ouve todas as actions disparadas pela aplica\u00e7\u00e3o e para alterar qualquer informa\u00e7\u00e3o do estado, precisamos utilizar os reducers.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\" id=\"h-anatomia-de-um-reducer\">Anatomia de um reducer<\/h4>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>const initialState = {...}\r\n\r\nfunction exemploReducer1(state = initialState, action) {\r\n\tswitch(action.type) {\r\n\t\tcase \u2018TYPE_1\u2019 :\r\n\t\t\treturn { ...state, data: action.payload.data };\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n                }\r\n}\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-actions\">Actions<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">S\u00e3o fontes de informa\u00e7\u00f5es que s\u00e3o enviadas da aplica\u00e7\u00e3o para o store pelos reducers. S\u00e3o disparadas (dispatch) pelos actions creators (fun\u00e7\u00f5es puras respons\u00e1veis por criarem as actions). Ainda vamos falar mais sobre os actions creators.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Tecnicamente, uma action \u00e9 um objeto que possui, obrigatoriamente, um atributo nomeado <em>type<\/em> que indica que a\u00e7\u00e3o \u00e9. Pode ter dados associados ou n\u00e3o, mas geralmente possuem. Esses dados s\u00e3o reunidos em \u00fanico atributo chamado de <em>payload<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como sugerido acima, um payload \u00e9 um conjunto de dados, mas tamb\u00e9m pode ser, por exemplo, uma chamada para back-end.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Actions n\u00e3o realiza nenhuma altera\u00e7\u00e3o em nosso estado global. Lembre-se, s\u00e3o apenas objetos.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\" id=\"h-anatomia-da-action\">Anatomia da Action<\/h4>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>{ \r\n    type: \u201cTIPO_DO_EVENTO\u201d,\r\n    payload: {\r\n\t\/\/ dados associados a essa action\r\n         }\r\n}\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\" id=\"h-action-creator\">Action Creator<\/h4>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Actions creators s\u00e3o fun\u00e7\u00f5es puras respons\u00e1veis por criarem as actions.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>function func1(params) {\r\n      \/\/ l\u00f3gica\r\n\r\nreturn {\r\n\t\ttype: \u201cTIPO_EVENTO\u201d,\r\n\t\tpayload: {\r\n                          \/\/ dados associados a essa action \r\n                                  }\r\n\r\n                           }\r\n}\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\" id=\"h-estado-estado-compartilhado\">Estado (estado compartilhado)<\/h4>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Basicamente, \u00e9 um objeto JavaScript com uma estrutura chave\/valor.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>{\r\n\tatributo1: [ {...}, {...}, \u2026 ],\r\n\tatributo2: {...}\r\n}\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Lembrando que o estado \u00e9 gerado a partir de uma fun\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bit.ly\/2XldlHa\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"720\" height=\"200\" class=\"wp-image-11595\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2021\/01\/cta-redux.png\" alt=\"vagas-react-redux\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux.png 720w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux-150x42.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux-100x28.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux-600x167.png 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux-450x125.png 450w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/a><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-conex-o-dos-componentes-ao-redux\">Conex\u00e3o dos componentes ao Redux<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para ter acesso \u00e0 evolu\u00e7\u00e3o de estados da store e disparar eventos para evolu\u00ed-la, \u00e9 preciso se conectar\/inscrever-se ao Redux. E como fazemos isso?<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">S\u00e3o basicamente dois passos:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>1\u00ba passo:<\/strong> as importa\u00e7\u00f5es.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>import { bindActionCreators } from \u2018redux\u2019\r\nimport { connect } from \u2018react-redux\u2019\r\n\r\n\/\/ e se voc\u00ea tiver um arquivos de actions creators, importe tamb\u00e9m.<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Agora seja um componente baseado em classe ou em fun\u00e7\u00e3o, no final do arquivo deve existir algo mais ou menos assim:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>2\u00ba passo:<\/strong> conex\u00e3o.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>const mapDispatchToProps = (dispatch) =&gt; bindActionCreators({...}, dispatch );\r\nexport default connect(null, mapDispatchToProps)( \/\/nome do componente );\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">De boa at\u00e9 aqui? Vamos continuar\u2026<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Depois que conhecemos um pouco da teoria, vamos partir para a pr\u00e1tica de um projeto muito simples, englobando sua cria\u00e7\u00e3o, a instala\u00e7\u00e3o das depend\u00eancias necess\u00e1rias e utiliza\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-criando-um-projeto-usando-o-redux\">Criando um projeto usando o Redux<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para criar um projeto, precisamos do <em>create-react-app<\/em> instalado globalmente. Para que isso aconte\u00e7a, rode o comando abaixo, caso voc\u00ea n\u00e3o o tenha.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>npm i -g create-react-app<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Agora, crie uma pasta qualquer, abra o terminal\/cmd e o rode o comando abaixo escolhendo o nome do projeto de exemplo.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>npx create-react-app [nome-do-projeto]<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-instala-o-das-depend-ncias\">Instala\u00e7\u00e3o das depend\u00eancias<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para utilizar o redux no seu projeto, precisamos instal\u00e1-lo. Podemos fazer utilizando o gerenciadores de pacote npm ou yarn.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\" id=\"h-npm\">NPM<\/h4>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>npm install --save redux react-redux<\/code><\/pre>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\" id=\"h-yarn\">Yarn<\/h4>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>yarn add redux react-redux<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nesse sentido, a depend\u00eancia \u201cextra\u201d \u00e9 para fazer a conex\u00e3o do React com o Redux.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-come-ando-a-utiliza-o-configura-o\">Come\u00e7ando a utiliza\u00e7\u00e3o (configura\u00e7\u00e3o)<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Crie uma pasta chamada storeConfig dentro de src do seu projeto. Dentro da pasta, crie um arquivo chamado store.js. O c\u00f3digo escrito nele pode ser:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>import { createStore, combineReducers } from \u2018redux\u2019\r\n\r\nconst reducers = combineReducers({\r\n\tprop1: function(state, action) {\r\n\treturn {\r\n                   exemplo: \u201cDeu certo!\u2019\r\n                   }\r\n\t},\r\n\r\n\tprop2: function(state, action) {\r\n\treturn {\r\n\t\t\texemplo: \u201cDe novo, deu certo!\u201d\r\n\t\t\t}\r\n})\r\n\r\n\r\nfunction store() {\r\n\treturn createStore(reducers)\r\n}\r\n\r\nexport default store\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A fun\u00e7\u00e3o <em>combine Reducers<\/em>, como o pr\u00f3prio nome diz, combina todos os reducers da aplica\u00e7\u00e3o para criar a store. Para o nosso exemplo, temos dois reducers, mas \u00e9 comum esse n\u00famero ser muito maior em um projeto React.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Logo depois, abaixo, estamos encapsulando a cria\u00e7\u00e3o da store pela fun\u00e7\u00e3o <em>createStore<\/em> (do Redux) dentro da fun\u00e7\u00e3o store e exportando-a.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Agora precisamos fazer a integra\u00e7\u00e3o do React com o Redux<em>.<\/em><\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No arquivo index.js da sua aplica\u00e7\u00e3o, as importa\u00e7\u00f5es podem ser mais ou menos como abaixo:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>import { Provider } from \u2018react-redux\u2019\r\nimport storeConfig from \u2018.\/storeConfig\/store\u2019\r\n\r\nconst store = storeConfig()\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nesse arquivo, teremos algo assim:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>ReactDOM.render(\r\n\t&lt;React.StrictMode&gt;\r\n\t\t&lt;App \/&gt;\r\n\t&lt;\/React.StrictMode&gt;,\r\n\tdocument.getElementById(\u2018app\u2019)\r\n);\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Agora ficar\u00e1 assim:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>ReactDOM.render(\r\n&lt;Provider store={store}&gt;\r\n\t&lt;React.StrictMode&gt;\r\n\t\t&lt;App \/&gt;\r\n\t&lt;\/React.StrictMode&gt;\r\n&lt;\/Provider&gt;,\r\n\tdocument.getElementById(\u2018app\u2019)\r\n);\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Pronto! J\u00e1 temos a integra\u00e7\u00e3o do React com Redux na sua aplica\u00e7\u00e3o. Agora, o que est\u00e1 faltando?<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-como-fazer-o-bind-dos-componentes-com-o-estado-da-sua-aplica-o\">Como fazer o bind dos componentes com o estado da sua aplica\u00e7\u00e3o<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para isso, precisamos de um componente interessado nos dados da store. Dentro da pasta src do seu projeto, crie uma pasta chamada componentes. Feito isso, crie um arquivo exemploComponente.jsx dentro dessa pasta. Pode ser o nome que voc\u00ea quiser, e tamb\u00e9m poder\u00e1 fazer algo realmente interessante para voc\u00ea.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Coloque o c\u00f3digo abaixo no arquivo jsx criado:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>import React, { Fragment } from \u2018react\u2019\r\nimport { connect } from \u2018react-redux\u2019\r\n\r\nfunction exemplo(props) {\r\n\t\treturn ( \r\n\t\t\t&lt;Fragment&gt;\r\n\t\t\t\t&lt;div&gt; props.prop1.exemplo&lt;\/div&gt;\r\n\t\t\t\t&lt;div&gt; props.prop2.exemplo&lt;\/div&gt;\r\n\t\t\t&lt;\/Fragment&gt;\r\n\t\t)\r\n}\r\n\r\n\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n\treturn {\r\n\t\tprop1: state.prop1,\r\n\t\tprop2.state.prop2\r\n}\r\n}\r\n\r\nexport default connect(mapStateToProps)(exemplo)<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Assim, utilizamos o connect (do react-redux) para devolver o componente conectado com o estado global da aplica\u00e7\u00e3o. Ele \u00e9 respons\u00e1vel por conectar o nosso componente ao estado global da aplica\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A fun\u00e7\u00e3o <em>mapStateToProps<\/em> mapeia o estado para as propriedades do componente.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Prontinho! Veja o que j\u00e1 temos:<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Projeto criado.<\/li>\r\n<li>Depend\u00eancias instaladas.<\/li>\r\n<li>Store criada.<\/li>\r\n<li>Componente conectado.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E j\u00e1 que estamos aqui, por que n\u00e3o alguns cursos <strong>gratuitos <\/strong>para voc\u00ea se aprofundar? Segue a lista:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><a href=\"https:\/\/egghead.io\/courses\/getting-started-with-redux\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Redux Tutorial by Dan Abramov on<\/a><\/li>\r\n<li><a href=\"https:\/\/www.udemy.com\/course\/react-redux-e-integracao-de-apis\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Tutorial de React gr\u00e1tis &#8211; React, Redux e integra\u00e7\u00e3o de APIs<\/a><\/li>\r\n<li><a href=\"https:\/\/redux.js.org\/introduction\/getting-started\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Getting Started with Redux<\/a><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No YouTube existem v\u00e1rios que tratam do tema tamb\u00e9m.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-conclus-o\">Conclus\u00e3o<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A utiliza\u00e7\u00e3o do Redux torna o gerenciamento de estado da sua aplica\u00e7\u00e3o simples e escal\u00e1vel, tornando-a f\u00e1cil de manter, uma vez que o acoplamento entre os componentes diminui drasticamente, ganhando, desse modo, em aspectos como produtividade.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Redux se tornou uma solu\u00e7\u00e3o quase que indispens\u00e1vel nas aplica\u00e7\u00f5es React, simplesmente por resolver algo complexo com tanta eleg\u00e2ncia.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Uma observa\u00e7\u00e3o:<\/strong> ainda assim n\u00e3o s\u00e3o todas as aplica\u00e7\u00f5es React que necessitam do Redux. Depende mesmo do grau de comunica\u00e7\u00e3o entre os componentes da sua aplica\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por outro lado, existe uma necessidade de an\u00e1lise para saber quais s\u00e3o os estados que realmente devem estar no Store.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">S\u00f3 mais uma coisinha&#8230; existe algo relacionado ao Redux que \u00e9 muito comum. S\u00e3o os <strong>middlewares<\/strong>. N\u00e3o \u00e9 do escopo deste artigo falar sobre eles, mas fica a ci\u00eancia sobre sua exist\u00eancia.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Espero que tenham gostado do conte\u00fado, lembrem-se\u00a0de acessar o projeto no link acima e at\u00e9 a pr\u00f3xima!<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bons estudos! \ud83d\ude0a<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"720\" height=\"200\" class=\"wp-image-11595\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2021\/01\/cta-redux.png\" alt=\"vagas-react-redux\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux.png 720w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux-150x42.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux-100x28.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux-600x167.png 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/cta-redux-450x125.png 450w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\r\n","protected":false},"excerpt":{"rendered":"<p>Vamos falar um pouco sobre o que \u00e9 o Redux, e o problema que ele veio resolver, abordando alguns dos seus conceitos centrais. O principal objetivo \u00e9 dar um norte para aqueles que est\u00e3o come\u00e7ando com o Redux. Por isso, neste artigo, a aplica\u00e7\u00e3o do Redux nos c\u00f3digos exemplificadores ser\u00e1 simples. A par da teoria, [&hellip;]<\/p>\n","protected":false},"author":167,"featured_media":11586,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-11583","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimiento-de-software"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Redux tutorial: um passo a passo simples para essa solu\u00e7\u00e3o!<\/title>\n<meta name=\"description\" content=\"Conhe\u00e7a as funcionalidades e como aplicar a solu\u00e7\u00e3o do Redux em seus projetos React JS de forma simples e r\u00e1pida! Vem conferir!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Redux: Um tutorial pr\u00e1tico e simples!\" \/>\n<meta property=\"og:description\" content=\"Vamos falar um pouco sobre o que \u00e9 o Redux, e o problema que ele veio resolver, abordando alguns dos seus conceitos centrais. O principal objetivo \u00e9 dar\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Geekhunter\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/geekhunterbr\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-07T13:29:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-29T14:26:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/redux-logo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Geekhunter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:site\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geekhunter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/\"},\"author\":{\"name\":\"Geekhunter\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\"},\"headline\":\"Redux: Um tutorial pr\u00e1tico e simples!\",\"datePublished\":\"2021-01-07T13:29:02+00:00\",\"dateModified\":\"2024-10-29T14:26:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/\"},\"wordCount\":1565,\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/redux-logo.png\",\"articleSection\":[\"Desenvolvimiento de software\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/\",\"name\":\"Redux tutorial: um passo a passo simples para essa solu\u00e7\u00e3o!\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/redux-logo.png\",\"datePublished\":\"2021-01-07T13:29:02+00:00\",\"dateModified\":\"2024-10-29T14:26:10+00:00\",\"description\":\"Conhe\u00e7a as funcionalidades e como aplicar a solu\u00e7\u00e3o do Redux em seus projetos React JS de forma simples e r\u00e1pida! Vem conferir!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/redux-um-tutorial-pratico-e-simples\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/redux-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/redux-logo.png\",\"width\":1200,\"height\":600,\"caption\":\"redux\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/redux-um-tutorial-pratico-e-simples\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mundo TI\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desenvolvimiento de software\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/desenvolvimiento-de-software\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Redux: Um tutorial pr\u00e1tico e simples!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"name\":\"Blog de TI\",\"description\":\"Dicas para o RH e profissionais da \u00e1rea TI\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\",\"name\":\"GeekHunter\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"width\":300,\"height\":300,\"caption\":\"GeekHunter\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/x.com\\\/geekhunterbr\",\"https:\\\/\\\/www.instagram.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/geekhunter-brasil\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@GeekHunterOfficial\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\",\"name\":\"Geekhunter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"caption\":\"Geekhunter\"},\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/author\\\/matias\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Redux tutorial: um passo a passo simples para essa solu\u00e7\u00e3o!","description":"Conhe\u00e7a as funcionalidades e como aplicar a solu\u00e7\u00e3o do Redux em seus projetos React JS de forma simples e r\u00e1pida! Vem conferir!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/","og_locale":"pt_BR","og_type":"article","og_title":"Redux: Um tutorial pr\u00e1tico e simples!","og_description":"Vamos falar um pouco sobre o que \u00e9 o Redux, e o problema que ele veio resolver, abordando alguns dos seus conceitos centrais. O principal objetivo \u00e9 dar","og_url":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/","og_site_name":"Blog Geekhunter","article_publisher":"https:\/\/www.facebook.com\/geekhunterbr\/","article_published_time":"2021-01-07T13:29:02+00:00","article_modified_time":"2024-10-29T14:26:10+00:00","og_image":[{"width":1200,"height":600,"url":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/redux-logo.png","type":"image\/png"}],"author":"Geekhunter","twitter_card":"summary_large_image","twitter_creator":"@geekhunterbr","twitter_site":"@geekhunterbr","twitter_misc":{"Escrito por":"Geekhunter","Est. tempo de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/#article","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/"},"author":{"name":"Geekhunter","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400"},"headline":"Redux: Um tutorial pr\u00e1tico e simples!","datePublished":"2021-01-07T13:29:02+00:00","dateModified":"2024-10-29T14:26:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/"},"wordCount":1565,"publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/redux-logo.png","articleSection":["Desenvolvimiento de software"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/","name":"Redux tutorial: um passo a passo simples para essa solu\u00e7\u00e3o!","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/#primaryimage"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/redux-logo.png","datePublished":"2021-01-07T13:29:02+00:00","dateModified":"2024-10-29T14:26:10+00:00","description":"Conhe\u00e7a as funcionalidades e como aplicar a solu\u00e7\u00e3o do Redux em seus projetos React JS de forma simples e r\u00e1pida! Vem conferir!","breadcrumb":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.geekhunter.com/pt/blog\/redux-um-tutorial-pratico-e-simples\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/#primaryimage","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2021\/01\/redux-logo.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/01\/redux-logo.png","width":1200,"height":600,"caption":"redux"},{"@type":"BreadcrumbList","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/redux-um-tutorial-pratico-e-simples\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.geekhunter.com/pt/blog\/"},{"@type":"ListItem","position":2,"name":"Mundo TI","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/"},{"@type":"ListItem","position":3,"name":"Desenvolvimiento de software","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/desenvolvimiento-de-software\/"},{"@type":"ListItem","position":4,"name":"Redux: Um tutorial pr\u00e1tico e simples!"}]},{"@type":"WebSite","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","name":"Blog de TI","description":"Dicas para o RH e profissionais da \u00e1rea TI","publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.geekhunter.com/pt/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization","name":"GeekHunter","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","width":300,"height":300,"caption":"GeekHunter"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/geekhunterbr\/","https:\/\/x.com\/geekhunterbr","https:\/\/www.instagram.com\/geekhunterbr\/","https:\/\/www.linkedin.com\/company\/geekhunter-brasil\/","https:\/\/www.youtube.com\/@GeekHunterOfficial"]},{"@type":"Person","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400","name":"Geekhunter","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","caption":"Geekhunter"},"url":"https:\/\/www.geekhunter.com\/pt\/blog\/author\/matias\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/11583","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/users\/167"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/comments?post=11583"}],"version-history":[{"count":0,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/11583\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media\/11586"}],"wp:attachment":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media?parent=11583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/categories?post=11583"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/tags?post=11583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}