{"id":48708,"date":"2024-04-11T12:00:00","date_gmt":"2024-04-11T15:00:00","guid":{"rendered":"https:\/\/www.locaweb.com.br\/blog\/?p=48708"},"modified":"2024-07-30T17:26:54","modified_gmt":"2024-07-30T20:26:54","slug":"react-js","status":"publish","type":"post","link":"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/react-js\/","title":{"rendered":"React JS: conhe\u00e7a as ferramentas essenciais do ecossistema\u00a0"},"content":{"rendered":"\n<p class=\"has-text-align-center\"><em>O React JS \u00e9 interessante para o desenvolvimento de aplica\u00e7\u00f5es web modernas e escal\u00e1veis. Conhe\u00e7a as principais ferramentas da biblioteca.<\/em>&nbsp;<\/p>\n\n\n\n<p>O React \u00e9 uma das <strong>bibliotecas JavaScript<\/strong> mais populares por conta de suas ferramentas que melhoram o processo de desenvolvimento de aplica\u00e7\u00f5es web.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Este guia se destina a desenvolvedores experientes que desejam explorar o <strong>ecossistema do React JS<\/strong> e descobrir maneiras de aprimorar suas habilidades.&nbsp;<\/p>\n\n\n\n<p>Vamos tratar desde <strong>bibliotecas para navega\u00e7\u00e3o<\/strong> e gerenciamento de estado at\u00e9 ferramentas para estiliza\u00e7\u00e3o de componentes e desenvolvimento de componentes isolados.&nbsp;<\/p>\n\n\n\n<p>Boa leitura!&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Como gerenciar a navega\u00e7\u00e3o com o React Router?<\/strong>&nbsp;<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"812\" height=\"500\" src=\"https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2024\/04\/react-js-2.jpg\" alt=\"Homem trabalhando em escrit\u00f3rio sobreposto por diversas linhas de c\u00f3digo\" class=\"wp-image-48720\" srcset=\"https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2024\/04\/react-js-2.jpg 812w, https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2024\/04\/react-js-2-500x308.jpg 500w, https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2024\/04\/react-js-2-768x473.jpg 768w, https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2024\/04\/react-js-2-150x92.jpg 150w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<p> <a href=\"https:\/\/www.gettyimages.com.br\/detail\/foto\/digitally-enhanced-shot-of-a-handsome-businessman-imagem-royalty-free\/1322205556\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><em>As bibliotecas do React JS facilitam o desenvolvimento de aplica\u00e7\u00f5es web.<\/em>&nbsp;<\/p>\n\n\n\n<p>O React Router \u00e9 uma biblioteca que permite <strong>gerenciar a navega\u00e7\u00e3o entre diferentes componentes <\/strong>da sua aplica\u00e7\u00e3o React JS de forma declarativa. Confira as principais ferramentas usadas com exemplos pr\u00e1ticos.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Rotas din\u00e2micas<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Quando uma aplica\u00e7\u00e3o web precisa lidar com diferentes <a href=\"https:\/\/www.locaweb.com.br\/blog\/produtos\/registro-de-dominio\/url-presenca-digital\/\" target=\"_blank\" rel=\"noreferrer noopener\">URLs<\/a> que podem conter par\u00e2metros vari\u00e1veis, como IDs de usu\u00e1rio ou produto, o React Router permite definir padr\u00f5es para usar em seus componentes.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Vamos lidar com <strong>rotas din\u00e2micas<\/strong> para exibir detalhes de produtos.&nbsp;&nbsp;<\/p>\n\n\n\n<p><em>import { BrowserRouter as Router, Route, Switch } from &#8216;react-router-dom&#8217;;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const App = () =&gt; (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;Router&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Header \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Switch&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Route exact path=&#8221;\/&#8221; component={Home} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Route exact path=&#8221;\/about&#8221; component={About} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Route exact path=&#8221;\/contact&#8221; component={Contact} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Route exact path=&#8221;\/products&#8221; component={Products} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Route path=&#8221;\/products\/:id&#8221; component={ProductDetails} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Route component={NotFound} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/Switch&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Footer \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;\/Router&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const Products = () =&gt; (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;h2&gt;Products&lt;\/h2&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;ul&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;&lt;Link to=&#8221;\/products\/1&#8243;&gt;Product 1&lt;\/Link&gt;&lt;\/li&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;&lt;Link to=&#8221;\/products\/2&#8243;&gt;Product 2&lt;\/Link&gt;&lt;\/li&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;&lt;Link to=&#8221;\/products\/3&#8243;&gt;Product 3&lt;\/Link&gt;&lt;\/li&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;\/ul&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const ProductDetails = ({ match }) =&gt; {<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; const productId = match.params.id;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; \/\/ Aqui voc\u00ea poderia fazer uma requisi\u00e7\u00e3o para obter os detalhes do produto com o ID fornecido<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; return (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h3&gt;Product Details &#8211; ID: {productId}&lt;\/h3&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {\/* Renderizar os detalhes do produto *\/}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; );<\/em>&nbsp;<\/p>\n\n\n\n<p><em>};<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const NotFound = () =&gt; (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;h2&gt;404 Not Found&lt;\/h2&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;p&gt;Oops! P\u00e1gina n\u00e3o encontrada.&lt;\/p&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>\/\/ Resto dos componentes, como Header, Footer, Home, About, Contact etc.<\/em>&nbsp;<\/p>\n\n\n\n<p>A <strong>rota \/products\/:id <\/strong>\u00e9 din\u00e2mica e corresponder\u00e1 a qualquer URL \/products\/ seguida por um ID de produto.&nbsp;&nbsp;<\/p>\n\n\n\n<p>O <strong>componente ProductDetails<\/strong> \u00e9 respons\u00e1vel por renderizar os detalhes do produto com base no ID fornecido na URL.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Assim, conseguimos criar uma <strong>interface escal\u00e1vel<\/strong> para exibir informa\u00e7\u00f5es espec\u00edficas de cada produto em sua aplica\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Navega\u00e7\u00e3o aninhada<\/strong>&nbsp;<\/h3>\n\n\n\n<p>\u00c0s vezes, \u00e9 necess\u00e1rio organizar suas rotas de <strong>forma hier\u00e1rquica<\/strong>, com rotas aninhadas dentro de outras rotas, correspondendo \u00e0 hierarquia de componentes em sua aplica\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p>Isso \u00e9 \u00fatil para criar <strong>interfaces de usu\u00e1rio complexas<\/strong>, como pain\u00e9is de administra\u00e7\u00e3o ou aplicativos com v\u00e1rias se\u00e7\u00f5es, em que certas partes da interface do usu\u00e1rio dependem da rota atual.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Em um exemplo de um painel de administra\u00e7\u00e3o, voc\u00ea pode ter uma rota principal <strong>\/admin<\/strong> que cont\u00e9m v\u00e1rias subrotas para diferentes se\u00e7\u00f5es, como \/admin\/dashboard, \/admin\/users, \/admin\/settings etc.&nbsp;<\/p>\n\n\n\n<p><em>import { BrowserRouter as Router, Route, Link } from &#8216;react-router-dom&#8217;;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const Dashboard = () =&gt; (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;h2&gt;Dashboard&lt;\/h2&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; {\/* Links para as subrotas *\/}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;ul&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;&lt;Link to=&#8221;\/admin\/dashboard\/analytics&#8221;&gt;Analytics&lt;\/Link&gt;&lt;\/li&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;&lt;Link to=&#8221;\/admin\/dashboard\/reports&#8221;&gt;Reports&lt;\/Link&gt;&lt;\/li&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;\/ul&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; {\/* Rotas aninhadas *\/}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;Route path=&#8221;\/admin\/dashboard\/analytics&#8221; component={Analytics} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;Route path=&#8221;\/admin\/dashboard\/reports&#8221; component={Reports} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const Analytics = () =&gt; (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;h3&gt;Analytics&lt;\/h3&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; {\/* Conte\u00fado da p\u00e1gina de Analytics *\/}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const Reports = () =&gt; (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;h3&gt;Reports&lt;\/h3&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; {\/* Conte\u00fado da p\u00e1gina de Reports *\/}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const App = () =&gt; (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;Router&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {\/* Rota principal para o painel de administra\u00e7\u00e3o *\/}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Route path=&#8221;\/admin&#8221; component={Dashboard} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; &lt;\/Router&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>export default App;<\/em>&nbsp;<\/p>\n\n\n\n<p>Na rota principal, temos a rota \/admin\/dashboard, que \u00e9 renderizada pelo componente <strong>Dashboard<\/strong>.&nbsp;<\/p>\n\n\n\n<p>Ele cont\u00e9m links para as subrotas \/admin\/dashboard\/analytics e \/admin\/dashboard\/reports, e tamb\u00e9m define rotas aninhadas para cada uma dessas subrotas, renderizando os componentes <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/marketing-e-seo\/como-usar-o-google-analytics\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Analytics<\/strong><\/a><strong> e Reports<\/strong>, respectivamente.&nbsp;&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Gest\u00e3o de estado<\/strong>&nbsp;<\/h3>\n\n\n\n<p>O React Router oferece op\u00e7\u00f5es para gerenciar a navega\u00e7\u00e3o, como o uso do <strong>componente &lt;Link&gt; <\/strong>e par\u00e2metros de rota para passar dados entre componentes.&nbsp;<\/p>\n\n\n\n<p>Podemos implementar, por exemplo, uma aplica\u00e7\u00e3o de lista de tarefas com o <strong>Redux<\/strong>. Primeiro, definimos a\u00e7\u00f5es para atualizar o estado, como adicionar uma nova tarefa ou alternar o estado de uma tarefa.&nbsp;<\/p>\n\n\n\n<p>Em seguida, criamos um reducer para lidar com essas a\u00e7\u00f5es, atualizando o estado conforme necess\u00e1rio.&nbsp;<\/p>\n\n\n\n<p>O store \u00e9 criado utilizando a fun\u00e7\u00e3o <strong>createStore <\/strong>do Redux, passando o reducer como argumento.&nbsp;&nbsp;<\/p>\n\n\n\n<p>O componente App \u00e9 envolvido pelo componente Provider para disponibilizar o store para todos os componentes filhos.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Dentro do App, inclu\u00edmos o componente TodoList, respons\u00e1vel por exibir a lista de tarefas e permitir a adi\u00e7\u00e3o de novas tarefas.&nbsp;<\/p>\n\n\n\n<p>Ele recebe o estado da aplica\u00e7\u00e3o (lista de tarefas) e as a\u00e7\u00f5es (addTask e toggleTask) como props, exibindo a lista de tarefas e permitindo a intera\u00e7\u00e3o do usu\u00e1rio.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Essas estruturas permitem uma gest\u00e3o eficaz do estado em aplica\u00e7\u00f5es React JS, mantendo a consist\u00eancia e facilitando a intera\u00e7\u00e3o do usu\u00e1rio com a aplica\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Lazy Loading<\/strong>&nbsp;<\/h3>\n\n\n\n<p>O Lazy Loading permite carregar de forma <strong>ass\u00edncrona<\/strong>, quando temos aplica\u00e7\u00f5es com muitos componentes ou rotas no <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/o-que-sao-arrays-em-javascript\/\" target=\"_blank\" rel=\"noreferrer noopener\">JavaScript<\/a>.&nbsp;<\/p>\n\n\n\n<p>Ao integr\u00e1-lo ao React Router, \u00e9 poss\u00edvel dividir sua aplica\u00e7\u00e3o em partes menores e <strong>carregar apenas o c\u00f3digo necess\u00e1rio<\/strong> para renderizar a p\u00e1gina atual.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Dessa forma, os componentes e recursos de rotas que n\u00e3o s\u00e3o imediatamente necess\u00e1rios n\u00e3o s\u00e3o carregados at\u00e9 que o usu\u00e1rio os solicite, reduzindo significativamente o tempo de carregamento inicial da aplica\u00e7\u00e3o e <strong>melhorando a <\/strong><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/media-query-site-responsivo\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>responsividade<\/strong><\/a> geral.&nbsp;<\/p>\n\n\n\n<p>Para implementar o Lazy Loading com o React Router, voc\u00ea pode usar a fun\u00e7\u00e3o <strong>React.lazy() <\/strong>para importar dinamicamente seus componentes de rota.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Por exemplo:&nbsp;<\/p>\n\n\n\n<p><em>import { Suspense } from &#8216;react&#8217;;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>import { BrowserRouter as Router, Route, Switch } from &#8216;react-router-dom&#8217;;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const LazyComponent = React.lazy(() =&gt; import(&#8216;.\/LazyComponent&#8217;));<\/em>&nbsp;<\/p>\n\n\n\n<p><em>function App() {<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; return (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;Router&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Suspense fallback={&lt;div&gt;Loading&#8230;&lt;\/div&gt;}&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Switch&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Route path=&#8221;\/lazy&#8221; component={LazyComponent} \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {\/* Outras rotas aqui *\/}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/Switch&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/Suspense&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;\/Router&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; );<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p>O componente LazyComponent ser\u00e1 carregado apenas quando a rota correspondente for acessada.&nbsp;&nbsp;<\/p>\n\n\n\n<p>J\u00e1 o <strong>componente Suspense<\/strong> exibe uma mensagem de carregamento enquanto o componente est\u00e1 sendo carregado de forma ass\u00edncrona.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Como manipular formul\u00e1rios com Formik?<\/strong>&nbsp;<\/h2>\n\n\n\n<iframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/KhnsReFNLdI?si=_Tq-BxMke_Iaq-kK\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n\n\n\n<p><\/p>\n\n\n\n<p>A biblioteca Formik simplifica a manipula\u00e7\u00e3o em aplica\u00e7\u00f5es React JS, oferecendo uma <strong>abordagem eficiente e intuitiva<\/strong> para lidar com a <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/logica-de-programacao-o-que-e\/\" target=\"_blank\" rel=\"noreferrer noopener\">l\u00f3gica<\/a> por tr\u00e1s dos formul\u00e1rios.&nbsp;<\/p>\n\n\n\n<p>Ao contr\u00e1rio de abordagens que geralmente envolvem o uso de estado local e manipula\u00e7\u00e3o manual de eventos, ela oferece uma <strong>solu\u00e7\u00e3o mais abrangente<\/strong>.&nbsp;<\/p>\n\n\n\n<p>Afinal,<strong> abstrai muitos dos aspectos<\/strong> complicados da intera\u00e7\u00e3o com formul\u00e1rios, como controle de estado, valida\u00e7\u00e3o de entrada e tratamento de eventos de envio.&nbsp;<\/p>\n\n\n\n<p>O padr\u00e3o de renderiza\u00e7\u00e3o de propriedades (<strong>prop render<\/strong>) renderiza os componentes de formul\u00e1rio diretamente dentro do Formik, mantendo o controle de estado e valida\u00e7\u00e3o associados.&nbsp;<\/p>\n\n\n\n<p>Com isso, o <strong>processo de cria\u00e7\u00e3o e manuten\u00e7\u00e3o de formul\u00e1rios \u00e9 simplificado<\/strong>, reduzindo a necessidade de acompanhar manualmente o estado em todo o aplicativo.&nbsp;<\/p>\n\n\n\n<p>Vamos explorar como manipular formul\u00e1rios com o Formik em uma aplica\u00e7\u00e3o React.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Uso do Formik para manipular formul\u00e1rios<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Suponhamos que temos um formul\u00e1rio de login com campos para e-mail e senha. Criamos um componente <strong>LoginForm <\/strong>e utilizamos o Formik para gerenciar o estado e lidar com as a\u00e7\u00f5es de envio:&nbsp;<\/p>\n\n\n\n<p><em>import React from &#8216;react&#8217;;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>import { Formik, Form, Field, ErrorMessage } from &#8216;formik&#8217;;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>const LoginForm = () =&gt; {<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; const handleSubmit = (values, { setSubmitting }) =&gt; {<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; \/\/ Simula\u00e7\u00e3o de envio de dados para um servidor<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; setTimeout(() =&gt; {<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; console.log(values);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setSubmitting(false);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; }, 1000);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; };<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; return (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h2&gt;Login&lt;\/h2&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Formik<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; initialValues={{ email: &#8221;, password: &#8221; }}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; validate={values =&gt; {<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const errors = {};<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!values.email) {<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errors.email = &#8216;Campo obrigat\u00f3rio&#8217;;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!values.password) {<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errors.password = &#8216;Campo obrigat\u00f3rio&#8217;;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return errors;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onSubmit={handleSubmit}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {({ isSubmitting }) =&gt; (<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Form&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Field type=&#8221;email&#8221; name=&#8221;email&#8221; placeholder=&#8221;Email&#8221; \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ErrorMessage name=&#8221;email&#8221; component=&#8221;div&#8221; \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Field type=&#8221;password&#8221; name=&#8221;password&#8221; placeholder=&#8221;Senha&#8221; \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ErrorMessage name=&#8221;password&#8221; component=&#8221;div&#8221; \/&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;button type=&#8221;submit&#8221; disabled={isSubmitting}&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enviar<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/button&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/Form&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/Formik&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp;&nbsp;&nbsp; &lt;\/div&gt;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>&nbsp; );<\/em>&nbsp;<\/p>\n\n\n\n<p><em>};<\/em>&nbsp;<\/p>\n\n\n\n<p><em>export default LoginForm;<\/em>&nbsp;<\/p>\n\n\n\n<p>No c\u00f3digo, estamos utilizando os <strong>componentes Formik<\/strong>, Form, Field e ErrorMessage para criar um formul\u00e1rio de login.&nbsp;&nbsp;<\/p>\n\n\n\n<p>O <strong>initialValues <\/strong>define os valores iniciais dos campos, <strong>validate<\/strong> \u00e9 uma fun\u00e7\u00e3o de valida\u00e7\u00e3o que verifica se os campos est\u00e3o preenchidos e <strong>onSubmit <\/strong>\u00e9 a fun\u00e7\u00e3o que ser\u00e1 chamada quando o formul\u00e1rio for enviado.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Valida\u00e7\u00e3o de entrada<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Quando se trata de lidar com valida\u00e7\u00e3o, envio de dados e tratamento de erros em formul\u00e1rios utilizando o Formik, existem v\u00e1rias estrat\u00e9gias para garantir uma <strong>experi\u00eancia de usu\u00e1rio suave<\/strong> e confi\u00e1vel.&nbsp;<\/p>\n\n\n\n<p>Na <strong>valida\u00e7\u00e3o de entrada<\/strong>, podemos utilizar as props validate ou validationSchema para definir as regras para cada campo.&nbsp;<\/p>\n\n\n\n<p>Al\u00e9m disso, \u00e9 poss\u00edvel implementar <strong>fun\u00e7\u00f5es personalizadas<\/strong> para validar formatos espec\u00edficos, como e-mails, n\u00fameros de telefone ou c\u00f3digos postais.&nbsp;<\/p>\n\n\n\n<p>Tamb\u00e9m \u00e9 recomendado aproveitar os <strong>esquemas de valida\u00e7\u00e3o<\/strong> fornecidos por bibliotecas externas, como Yup, para simplificar a defini\u00e7\u00e3o de regras complexas.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Feedback de validade<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Para fornecer <strong>feedback de validade<\/strong>, \u00e9 essencial exibir mensagens de erro relevantes ao lado de cada campo do formul\u00e1rio para indicar ao usu\u00e1rio quando uma entrada \u00e9 inv\u00e1lida.&nbsp;<\/p>\n\n\n\n<p>Isso pode ser feito utilizando a <strong>prop error<\/strong> fornecida pelo Formik para acessar as mensagens de erro associadas a cada campo do formul\u00e1rio e exibi-las dinamicamente com base no estado de valida\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Envio de dados<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Devemos implementar a fun\u00e7\u00e3o handleSubmit para lidar com o envio de dados do formul\u00e1rio.&nbsp;<\/p>\n\n\n\n<p>\u00c9 importante realizar qualquer <strong>valida\u00e7\u00e3o adicional<\/strong> ou processamento de dados antes de enviar os dados para o servidor.&nbsp;<\/p>\n\n\n\n<p>Usamos <strong>m\u00e9todos ass\u00edncronos<\/strong> como chamadas de <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/o-que-e-api\/\" target=\"_blank\" rel=\"noreferrer noopener\">API<\/a> dentro do handleSubmit para enviar os dados para o servidor e lidar com a resposta dele de forma adequada.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Tratamento de erros<\/strong>&nbsp;<\/h3>\n\n\n\n<p>A l\u00f3gica de tratamento de erros dentro do <strong>handleSubmit <\/strong>lida com casos em que o envio de dados falha.&nbsp;<\/p>\n\n\n\n<p>\u00c9 essencial exibir <strong>mensagens apropriadas<\/strong> para informar ao usu\u00e1rio quando ocorrer um erro durante o envio de dados.&nbsp;<\/p>\n\n\n\n<p>Essa mensagem tem de ser visual tamb\u00e9m. Manter o <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/como-comecar-a-atuar-na-area-de-ux-e-ui-design\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>design<\/strong><\/a><strong> <\/strong>do feedback alinhado com o da aplica\u00e7\u00e3o resulta em uma experi\u00eancia coesa.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Integra\u00e7\u00e3o do Formik com outras bibliotecas<\/strong>&nbsp;<\/h3>\n\n\n\n<p>A integra\u00e7\u00e3o do Formik com outras bibliotecas pode proporcionar uma experi\u00eancia de formul\u00e1rio ainda mais eficiente, aproveitando as <strong>funcionalidades complementares<\/strong> oferecidas.&nbsp;<\/p>\n\n\n\n<p>Ao utilizar o <strong>Yup <\/strong>juntamente com o Formik, \u00e9 poss\u00edvel definir esquemas de valida\u00e7\u00e3o complexos de forma declarativa.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Com a prop <strong>validationSchema<\/strong>, d\u00e1 para especificar um esquema de valida\u00e7\u00e3o Yup para o formul\u00e1rio, aproveitando funcionalidades poderosas como valida\u00e7\u00e3o condicional, valida\u00e7\u00e3o ass\u00edncrona e mensagens de erro personalizadas.&nbsp;<\/p>\n\n\n\n<p>J\u00e1 a integra\u00e7\u00e3o com o <strong>React Select<\/strong> permite criar campos de sele\u00e7\u00e3o personalizados e avan\u00e7ados.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Ao encapsular o componente React Select dentro do <strong>componente Field<\/strong> do Formik, \u00e9 poss\u00edvel sincronizar automaticamente o estado do formul\u00e1rio com o componente de sele\u00e7\u00e3o.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Dessa maneira, aproveitamos funcionalidades avan\u00e7adas como <strong>filtragem, pesquisa, agrupamento e controle de m\u00faltipla sele\u00e7\u00e3o<\/strong> para melhorar a <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/como-a-velocidade-do-site-influencia-na-experiencia-do-usuario\/\" target=\"_blank\" rel=\"noreferrer noopener\">experi\u00eancia do usu\u00e1rio<\/a> ao lidar com campos de sele\u00e7\u00e3o em formul\u00e1rios.&nbsp;<\/p>\n\n\n\n<p><strong>Leia mais<\/strong>:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/quais-sao-os-impactos-do-react-no-e-commerce\/\" target=\"_blank\" rel=\"noreferrer noopener\">Quais s\u00e3o os impactos do React no e-commerce?<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/evolucao-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">Evolu\u00e7\u00e3o do PHP baseada em efici\u00eancia<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/como-usar-a-plataforma-firebase\/\" target=\"_blank\" rel=\"noreferrer noopener\">Saiba mais sobre o que \u00e9 e como usar a plataforma Firebase<\/a>&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Por usar o Styled Components?<\/strong>&nbsp;<\/h2>\n\n\n\n<p>A biblioteca Styled Components oferece praticidade na <strong>estiliza\u00e7\u00e3o de componentes<\/strong> React JS.&nbsp;<\/p>\n\n\n\n<p>Ela pode criar <strong>estilos din\u00e2micos<\/strong> com base em props ou estado, permitindo gerar componentes personaliz\u00e1veis e reutiliz\u00e1veis, adaptando conforme condi\u00e7\u00f5es ou dados espec\u00edficos.&nbsp;<\/p>\n\n\n\n<p>Por exemplo, \u00e9 poss\u00edvel alterar a cor de um bot\u00e3o com base no estado de um formul\u00e1rio ou <strong>personalizar um componente<\/strong> de acordo com diferentes propriedades.&nbsp;<\/p>\n\n\n\n<p>A ferramenta tamb\u00e9m <strong>simplifica a organiza\u00e7\u00e3o<\/strong> e manuten\u00e7\u00e3o de estilos em componentes React.&nbsp;<\/p>\n\n\n\n<p>Ao <strong>encapsular os estilos<\/strong> diretamente nos componentes, voc\u00ea elimina a necessidade de arquivos separados, reduzindo a complexidade e melhorando a legibilidade do <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/porque-aprender-a-escrever-codigos\/\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00f3digo<\/a>.&nbsp;<\/p>\n\n\n\n<p>O Styled Components oferece suporte \u00e0 estiliza\u00e7\u00e3o global e \u00e0 defini\u00e7\u00e3o de temas, permitindo a cria\u00e7\u00e3o de estilos consistentes em toda a aplica\u00e7\u00e3o e a <strong>f\u00e1cil personaliza\u00e7\u00e3o<\/strong> de design.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Como fazer gerenciamento de estado com React Query?<\/strong>&nbsp;<\/h2>\n\n\n\n<p>O React Query \u00e9 uma biblioteca desenvolvida para simplificar o gerenciamento de estado em <strong>aplica\u00e7\u00f5es React que lidam com dados remotos<\/strong>.&nbsp;<\/p>\n\n\n\n<p>Uma de suas principais vantagens \u00e9 a <strong>simplifica\u00e7\u00e3o da integra\u00e7\u00e3o com APIs<\/strong>. Ele fornece ganchos e utilit\u00e1rios para fazer solicita\u00e7\u00f5es de forma f\u00e1cil e eficiente, gerenciando automaticamente o ciclo de vida e atualizando o estado conforme necess\u00e1rio.&nbsp;<\/p>\n\n\n\n<p>Al\u00e9m disso, o React Query conta com um sistema integrado de <strong>gerenciamento de cache autom\u00e1tico<\/strong>.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Assim, os resultados das solicita\u00e7\u00f5es de API podem ser armazenados automaticamente, permitindo que sejam recuperados do cache, em vez de fazer uma nova solicita\u00e7\u00e3o quando necess\u00e1rio.&nbsp;<\/p>\n\n\n\n<p>A biblioteca tamb\u00e9m oferece <strong>ganchos para acessar e manipular os dados<\/strong> de forma eficiente, al\u00e9m de fun\u00e7\u00f5es para atualizar, invalidar e refetch dados conforme a necessidade, o que simplifica o gerenciamento do estado.&nbsp;<\/p>\n\n\n\n<p>O React Query tem suporte para uma variedade de recursos avan\u00e7ados, como pagina\u00e7\u00e3o, refetching manual e prefetching de dados, permitindo <strong>personalizar o comportamento do gerenciamento de estado<\/strong> segundo as necessidades espec\u00edficas da aplica\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p>Apesar de ser uma biblioteca independente, ele pode ser facilmente <strong>integrado a outras bibliotecas de estado<\/strong>, como Redux, se necess\u00e1rio.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Estrat\u00e9gias para realizar consultas, atualiza\u00e7\u00f5es e invalida\u00e7\u00e3o de cache<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Para realizar consultas, atualiza\u00e7\u00f5es e invalida\u00e7\u00e3o de cache de forma pr\u00e1tica com o React Query, \u00e9 importante entender os principais <strong>conceitos e estrat\u00e9gias<\/strong> oferecidos pela biblioteca.&nbsp;&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Consultas (queries)<\/strong>: utilize o useQuery para buscar dados de uma API, passando a fun\u00e7\u00e3o que realiza a solicita\u00e7\u00e3o como argumento.&nbsp;<\/li>\n\n\n\n<li><strong>Atualiza\u00e7\u00f5es (mutations)<\/strong>: com o useMutation, defina uma fun\u00e7\u00e3o que faz a opera\u00e7\u00e3o de atualiza\u00e7\u00e3o na API. Em seguida, chame-a quando necess\u00e1rio, por exemplo, em resposta a um evento de clique em um bot\u00e3o de envio de formul\u00e1rio.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Invalida\u00e7\u00e3o de cache<\/strong>: voc\u00ea pode chamar a fun\u00e7\u00e3o refetch em resposta a eventos espec\u00edficos, como uma a\u00e7\u00e3o de atualiza\u00e7\u00e3o bem-sucedida.&nbsp;<\/li>\n\n\n\n<li><strong>Atualiza\u00e7\u00e3o otimista<\/strong>: a op\u00e7\u00e3o optimisticUpdate chama a fun\u00e7\u00e3o mutate em uma opera\u00e7\u00e3o para atualizar localmente os dados antes de enviar a solicita\u00e7\u00e3o para o servidor.&nbsp;&nbsp;<\/li>\n\n\n\n<li><strong>Gest\u00e3o de erros<\/strong>: onError e onSettled lidam com problemas de solicita\u00e7\u00e3o, exibindo mensagens ao usu\u00e1rio ou executando a\u00e7\u00f5es de limpeza, como redefinir o estado da aplica\u00e7\u00e3o.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Integra\u00e7\u00e3o com outras bibliotecas de estado<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Integrar o React Query a outras bibliotecas de estado, como o Redux, pode ser necess\u00e1rio em cen\u00e1rios onde j\u00e1 h\u00e1 um <strong>uso extensivo dessas bibliotecas<\/strong> e \u00e9 crucial manter a consist\u00eancia do estado global.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Para realizar essa integra\u00e7\u00e3o de forma eficaz, siga um passo a passo pr\u00e1tico.&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li>Configure o <strong>Redux Toolkit <\/strong>para criar uma store com reducers para o estado global e utilize o React Query para consultas e atualiza\u00e7\u00f5es de dados remotos.&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>Configure um<strong> <\/strong><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/middleware-para-que-serve\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>middleware<\/strong><\/a><strong> Redux<\/strong> que intercepte a\u00e7\u00f5es espec\u00edficas do React Query, como solicita\u00e7\u00f5es de consulta ou atualiza\u00e7\u00e3o, e execute l\u00f3gica adicional, como atualiza\u00e7\u00f5es no estado global ou disparo de outras a\u00e7\u00f5es.&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>Defina <strong>selectors Redux<\/strong> que extraiam e formatem dados obtidos por meio das consultas do React Query, tornando-os dispon\u00edveis para serem usados em componentes React conectados ao Redux.&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>Defina <strong>a\u00e7\u00f5es Redux<\/strong> que encapsulem opera\u00e7\u00f5es relacionadas ao React Query, como iniciar ou finalizar uma consulta, atualizar o estado de carregamento ou lidar com erros, e despache essas a\u00e7\u00f5es nos momentos apropriados dentro da l\u00f3gica do React Query.&nbsp;<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Quais s\u00e3o as vantagens do Storybook no desenvolvimento de componentes React?<\/strong>&nbsp;<\/h2>\n\n\n\n<p>O Storybook simplifica o desenvolvimento e a documenta\u00e7\u00e3o de componentes React JS de forma isolada, oferecendo diversas funcionalidades.&nbsp;<\/p>\n\n\n\n<p>No <strong>desenvolvimento iterativo<\/strong>, podemos criar e iterar rapidamente sobre componentes, sem a necessidade de configurar toda a aplica\u00e7\u00e3o.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Isso permite um foco mais direcionado na implementa\u00e7\u00e3o e na visualiza\u00e7\u00e3o individual deles.&nbsp;<\/p>\n\n\n\n<p>A capacidade de <strong>gerar documenta\u00e7\u00e3o automaticamente<\/strong> para os componentes \u00e9 outra vantagem importante do Storybook.&nbsp;<\/p>\n\n\n\n<p>Por meio da <strong>adi\u00e7\u00e3o de anota\u00e7\u00f5es (stories)<\/strong> que descrevem comportamento, propriedades e casos de uso, as pessoas desenvolvedoras podem simplificar significativamente a compreens\u00e3o e a utiliza\u00e7\u00e3o correta.&nbsp;<\/p>\n\n\n\n<p>Al\u00e9m disso, o Storybook oferece suporte a <strong>testes visuais<\/strong>, permitindo que devs comparem visualmente as altera\u00e7\u00f5es nos componentes ao longo do tempo.&nbsp;<\/p>\n\n\n\n<p>Por fim, o Storybook facilita a visualiza\u00e7\u00e3o e <strong>reutiliza\u00e7\u00e3o de componentes<\/strong> em outros projetos, promovendo a consist\u00eancia e padroniza\u00e7\u00e3o no desenvolvimento.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Cria\u00e7\u00e3o de uma biblioteca usando Storybook<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Para criar uma biblioteca de componentes visualmente atraente e funcional utilizando o Storybook, \u00e9 essencial estabelecer <strong>diretrizes claras de design e estilo<\/strong> para aplicar de forma consistente, garantindo uma experi\u00eancia de usu\u00e1rio coesa.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Antes de tudo, divida a <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/padroes-e-principios-para-desenvolvimento-de-interfaces\/\" target=\"_blank\" rel=\"noreferrer noopener\">interface<\/a> do usu\u00e1rio em <strong>componentes reutiliz\u00e1veis e modulares<\/strong>, facilitando sua manuten\u00e7\u00e3o e reutiliza\u00e7\u00e3o em diferentes partes da aplica\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p>Uma dica \u00e9 utilizar o <strong>Storybook <\/strong>para documentar cada componente de maneira clara e detalhada, incluindo exemplos de uso e descri\u00e7\u00f5es de propriedades. Isso torna mais f\u00e1cil para a equipe de desenvolvimento entender como utiliz\u00e1-los corretamente.&nbsp;<\/p>\n\n\n\n<p>Os <strong>testes visuais<\/strong> garantem que os componentes sejam renderizados e mantenham a consist\u00eancia visual esperada ao longo do tempo.&nbsp;<\/p>\n\n\n\n<p>Projete os componentes para serem facilmente <strong>personaliz\u00e1veis e estendidos<\/strong>, oferecendo flexibilidade para adaptar o Storybook \u00e0s necessidades espec\u00edficas do projeto.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Extens\u00e3o das capacidades com addons<\/strong>&nbsp;<\/h3>\n\n\n\n<p>O uso de <strong>addons e plugins<\/strong> para estender as capacidades do Storybook permite adicionar funcionalidades como visualiza\u00e7\u00e3o de a\u00e7\u00f5es, intera\u00e7\u00e3o din\u00e2mica com knobs, testes automatizados e documenta\u00e7\u00e3o autom\u00e1tica, proporcionando uma experi\u00eancia mais completa e eficiente.&nbsp;<\/p>\n\n\n\n<p>Al\u00e9m disso, possibilita personalizar o Storybook com <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/de-olho-no-digital\/chatgpt-plugins\/\" target=\"_blank\" rel=\"noreferrer noopener\">plugins<\/a> espec\u00edficos que atendam \u00e0s necessidades do projeto, oferecendo <strong>flexibilidade e adaptabilidade<\/strong> \u00e0s demandas do desenvolvimento de componentes React JS.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Quais s\u00e3o os benef\u00edcios de usar bibliotecas no React JS?<\/strong>&nbsp;<\/h2>\n\n\n\n<p>Ao adotar estrategicamente as <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/desenvolvimento-hibrido\/\" target=\"_blank\" rel=\"noreferrer noopener\">bibliotecas<\/a> em projetos com React JS, podemos <strong>simplificar a implementa\u00e7\u00e3o de funcionalidades complexas<\/strong>, melhorar a qualidade do c\u00f3digo e garantir a facilidade de manuten\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p>A capacidade de integrar eficientemente essas ferramentas no fluxo de trabalho resulta em um <strong>ciclo de desenvolvimento mais r\u00e1pido<\/strong> e com menos bugs, al\u00e9m de uma boa experi\u00eancia para usu\u00e1rios.&nbsp;<\/p>\n\n\n\n<p>Pronto para levar sua aplica\u00e7\u00e3o para o pr\u00f3ximo n\u00edvel? Experimente a <strong>Hospedagem Dedicada Locaweb<\/strong> com sites ilimitados, disco SSD, muito mais estabilidade e performance.&nbsp;<\/p>\n\n\n\n<div class=\"user-cta-block\" style=\"background-color:#2E333C;\"><p>Mantenha o seu site no ar mesmo com picos de acesso, sem compartilhar mem\u00f3ria, processamento e disco. Conhe\u00e7a a Hospedagem Dedicada Locaweb!<\/p><a class=\"user-cta\" style=\"background-color: #00acc8;\" href=\"https:\/\/www.locaweb.com.br\/hospedagem-dedicada\/?utm_source=blog&#038;utm_medium=own&#038;utm_campaign=blog-hospedagem-dedicada-react-js&#038;utm_id=blog-vendas\" target=\"_blank\" rel=\"noopener\">Clique aqui!<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>O React JS \u00e9 interessante para o desenvolvimento de aplica\u00e7\u00f5es web modernas e escal\u00e1veis. Conhe\u00e7a as principais ferramentas da biblioteca.&nbsp; O React \u00e9 uma das bibliotecas JavaScript mais populares por conta de suas ferramentas que melhoram o processo de desenvolvimento de aplica\u00e7\u00f5es web.&nbsp;&nbsp; Este guia se destina a desenvolvedores experientes que desejam explorar o ecossistema [&hellip;]<\/p>\n","protected":false},"author":24,"featured_media":48718,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-48708","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-aberto"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/48708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/users\/24"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=48708"}],"version-history":[{"count":4,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/48708\/revisions"}],"predecessor-version":[{"id":48725,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/48708\/revisions\/48725"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media\/48718"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=48708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=48708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=48708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}