<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Redux - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Redux - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 26 May 2026 04:21:30 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/redux/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Como usar o Redux em sua aplicação do React com TypeScript ]]>
                </title>
                <description>
                    <![CDATA[ O Redux é um contêiner de estado previsível para aplicações escritas em JavaScript. Ele também é popularmente conhecido como uma biblioteca para o gerenciamento de estado em aplicações do React. Utilizar o Redux junto com TypeScript oferece ao desenvolvedor uma melhor experiência, pois o TypeScript é um superconjunto do JavaScript ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-usar-o-redux-em-sua-aplicacao-do-react-com-typescript/</link>
                <guid isPermaLink="false">63304f8c5c046e06ec87ab43</guid>
                
                    <category>
                        <![CDATA[ Redux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gabriel Galdino ]]>
                </dc:creator>
                <pubDate>Tue, 11 Oct 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/cover.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-use-redux-in-your-react-typescript-app/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Use Redux in Your React TypeScript App</a>
      </p><p>O Redux é um contêiner de estado previsível para aplicações escritas em JavaScript. Ele também é popularmente conhecido como uma biblioteca para o gerenciamento de estado em aplicações do React.</p><p>Utilizar o Redux junto com TypeScript oferece ao desenvolvedor uma melhor experiência, pois o TypeScript é um superconjunto do JavaScript que verifica o código para torná-lo robusto e compreensível.</p><p>Neste guia, mostrarei como usar o Redux em seu projeto com TypeScript criando uma aplicação do React que permite adicionar, excluir e exibir artigos.</p><p><em>Vamos lá!</em></p><ul><li><a href="https://www.freecodecamp.org/portuguese/news/como-usar-o-redux-em-sua-aplicacao-do-react-com-typescript/#pr-requisitos">Pré-requisitos</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-usar-o-redux-em-sua-aplicacao-do-react-com-typescript/#configurando-o-projeto">Configurando o projeto</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-usar-o-redux-em-sua-aplicacao-do-react-com-typescript/#criando-os-tipos">Criando os tipos</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-usar-o-redux-em-sua-aplicacao-do-react-com-typescript/#criando-os-tipos-de-a-o">Criando os tipos de ação</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-usar-o-redux-em-sua-aplicacao-do-react-com-typescript/#criando-os-criadores-de-a-o">Criando os criadores de ação</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-usar-o-redux-em-sua-aplicacao-do-react-com-typescript/#criando-um-redutor">Criando um redutor</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-usar-o-redux-em-sua-aplicacao-do-react-com-typescript/#criando-um-reposit-rio">Criando um repositório</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-usar-o-redux-em-sua-aplicacao-do-react-com-typescript/#criando-os-componentes">Criando os componentes</a></li></ul><h2 id="pr-requisitos">Pré-requisitos</h2><p>Este tutorial pressupõe que você tenha pelo menos um conhecimento básico de React, Redux e TypeScript.</p><p>Portanto, se não estiver familiarizado com essas tecnologias, tente primeiro ler este <a href="https://www.ibrahima-ndaw.com/blog/a-practical-guide-to-typescript/">guia prático do TypeScript</a> ou este <a href="https://www.ibrahima-ndaw.com/blog/7-steps-to-understand-react-redux/">tutorial do React Redux</a> (textos em inglês). Caso contrário, vamos começar.</p><h2 id="configurando-o-projeto">Configurando o projeto</h2><p>Para usar o Redux e o TypeScript, precisamos criar uma aplicação em React.</p><p>Para isso, vamos abrir a CLI (interface de linha de comando) e executar este comando:</p><pre><code class="language-shell">  npx create-react-app my-app --template typescript
</code></pre><p>A seguir, vamos estruturar o projeto do seguinte modo:</p><pre><code>├── src
|  ├── components
|  |  ├── AddArticle.tsx
|  |  └── Article.tsx
|  ├── store
|  |  ├── actionCreators.ts
|  |  ├── actionTypes.ts
|  |  └── reducer.ts
|  ├── type.d.ts
|  ├── App.test.tsx
|  ├── App.tsx
|  ├── index.css
|  ├── index.tsx
|  ├── react-app-env.d.ts
|  └── setupTests.ts
├── tsconfig.json
├── package.json
└── yarn.lock
</code></pre><p>A estrutura de arquivos do projeto é bastante simples. No entanto, há duas coisas que você deve prestar atenção:</p><ul><li>A pasta <code>store</code> do repositório, que contém arquivos relacionados ao React Redux. </li><li>O arquivo <code>type.d.ts</code>, que contém os tipos do TypeScript, que podem ser usados agora em outros arquivos sem importar.</li></ul><p>Dito isso, agora, podemos instalar o Redux e criar nosso primeiro repositório.</p><p>Com isso, vamos abrir o projeto e executar o seguinte comando:</p><pre><code class="language-shell">  yarn add redux react-redux redux-thunk
</code></pre><p>Se, no lugar do Yarn, você estiver usando o <code>npm</code>, execute:</p><pre><code class="language-shell">  npm install redux react-redux redux-thunk
</code></pre><p>Também precisamos instalar os tipos como dependências de desenvolvimento para ajudar o TypeScript a entender as bibliotecas.</p><p>Então, vamos executar este comando novamente na CLI.</p><pre><code class="language-shell">  yarn add -D @types/redux @types/react-redux @types/redux-thunk
</code></pre><p>No <code>npm</code>:</p><pre><code class="language-shell">  npm install -D @types/redux @types/react-redux @types/redux-thunk
</code></pre><p>Ótimo! A partir de agora podemos criar os tipos do TypeScript para o projeto na próxima seção.</p><h2 id="criando-os-tipos"><strong>Criando os tipos</strong></h2><p>Os tipos do TypeScript permitem definir tipos para suas variáveis, parâmetros de função e assim por diante.</p><ul><li>type.d.ts</li></ul><pre><code class="language-ts">interface IArticle {
  id: number
  title: string
  body: string
}

type ArticleState = {
  articles: IArticle[]
}

type ArticleAction = {
  type: string
  article: IArticle
}

type DispatchType = (args: ArticleAction) =&gt; ArticleAction
</code></pre><p>Aqui, começamos declarando a interface <code>IArticle</code>, que reflete a forma de um determinado artigo.</p><p>Em seguida, temos <code>ArticleState</code>, <code>ArticleAction</code> e <code>DispatchType</code>, que servirão como tipos para, respectivamente, o objeto de estado, os criadores de ação e a função de <em>dispatch</em> fornecida pelo Redux. </p><p>Dito isso, agora temos os tipos necessários para começar a usar o React Redux. A seguir, vamos criar os tipos de ação.</p><h2 id="criando-os-tipos-de-a-o"><strong>Criando os tipos de ação</strong></h2><ul><li>store/actionTypes.ts</li></ul><pre><code class="language-ts">export const ADD_ARTICLE = "ADD_ARTICLE"
export const REMOVE_ARTICLE = "REMOVE_ARTICLE"
</code></pre><p>Precisamos de dois tipos de ação para o repositório em Redux, um para adicionar artigos e outro para excluí-los.</p><h2 id="criando-os-criadores-de-a-o"><strong>Criando os criadores de ação</strong></h2><ul><li>store/actionCreators.ts</li></ul><pre><code class="language-ts">import * as actionTypes from "./actionTypes"

export function addArticle(article: IArticle) {
  const action: ArticleAction = {
    type: actionTypes.ADD_ARTICLE,
    article,
  }

  return simulateHttpRequest(action)
}

export function removeArticle(article: IArticle) {
  const action: ArticleAction = {
    type: actionTypes.REMOVE_ARTICLE,
    article,
  }
  return simulateHttpRequest(action)
}

export function simulateHttpRequest(action: ArticleAction) {
  return (dispatch: DispatchType) =&gt; {
    setTimeout(() =&gt; {
      dispatch(action)
    }, 500)
  }
}
</code></pre><p>Neste tutorial, simularei a solicitação HTTP atrasando-a por meio segundo. Se quiser, porém, sinta-se à vontade para usar um servidor real.</p><p>Aqui, a função <code>addArticle</code> fará o <em>dispatching</em> de uma ação para adicionar um novo artigo, enquanto o método <code>removeArticle</code> fará o oposto. Portanto, exclua o objeto passado como argumento.</p><h2 id="criando-um-redutor"><strong>Criando um redutor</strong></h2><p>Um redutor (em inglês, <em>reducer</em>) é uma função pura que recebe o estado do repositório e uma ação como parâmetro e depois retorna o estado atualizado.</p><ul><li>store/reducer.ts</li></ul><pre><code class="language-ts">import * as actionTypes from "./actionTypes"

const initialState: ArticleState = {
  articles: [
    {
      id: 1,
      title: "post 1",
      body:
        "Quisque cursus, metus vitae pharetra Nam libero tempore, cum soluta nobis est eligendi",
    },
    {
      id: 2,
      title: "post 2",
      body:
        "Harum quidem rerum facilis est et expedita distinctio quas molestias excepturi sint",
    },
  ],
}
</code></pre><p>Como você pode ver aqui, declaramos um estado inicial para que alguns artigos sejam exibidos quando a página for carregada. O objeto de estado precisa corresponder ao tipo <code>ArticleState</code> – caso contrário, o TypeScript gerará um erro.</p><ul><li>store/reducer.ts</li></ul><pre><code class="language-ts">const reducer = (
  state: ArticleState = initialState,
  action: ArticleAction
): ArticleState =&gt; {
  switch (action.type) {
    case actionTypes.ADD_ARTICLE:
      const newArticle: IArticle = {
        id: Math.random(), // not really unique
        title: action.article.title,
        body: action.article.body,
      }
      return {
        ...state,
        articles: state.articles.concat(newArticle),
      }
    case actionTypes.REMOVE_ARTICLE:
      const updatedArticles: IArticle[] = state.articles.filter(
        article =&gt; article.id !== action.article.id
      )
      return {
        ...state,
        articles: updatedArticles,
      }
  }
  return state
}

export default reducer
</code></pre><p>Em seguida, temos a função <code>reducer</code>, que espera o estado anterior e uma ação para poder atualizar o repositório. Aqui, temos duas ações: uma para adicionar e outra para excluir.</p><p>Com isso definido, agora podemos manipular o estado com o redutor. Próximo passo: criar um repositório para o projeto.</p><h2 id="criando-um-reposit-rio"><strong>Criando um repositório </strong></h2><p>O repositório em Redux é, na prática, onde vive o estado da sua aplicação.</p><ul><li>index.tsx</li></ul><pre><code class="language-tsx">import * as React from "react"
import { render } from "react-dom"
import { createStore, applyMiddleware, Store } from "redux"
import { Provider } from "react-redux"
import thunk from "redux-thunk"

import App from "./App"
import reducer from "./store/reducer"

const store: Store&lt;ArticleState, ArticleAction&gt; &amp; {
  dispatch: DispatchType
} = createStore(reducer, applyMiddleware(thunk))

const rootElement = document.getElementById("root")
render(
  &lt;Provider store={store}&gt;
    &lt;App /&gt;
  &lt;/Provider&gt;,
  rootElement
)
</code></pre><p>Como você pode ver, importamos a função do redutor e a passamos como argumento para o método <code>createStore</code> para criar um repositório do Redux. O middleware <code>redux-thunk</code> precisa ser passado como um segundo parâmetro, bem como o método para poder manipular o código assíncrono.</p><p>Em seguida, conectamos o React ao Redux fornecendo o objeto <code>store</code> como <em>props </em>ao componente <code>Provider</code>.</p><p>Agora, podemos usar o Redux neste projeto e acessar o repositório. Então, vamos criar os componentes para obter e manipular os dados.</p><h2 id="criando-os-componentes"><strong>Criando os componentes</strong></h2><ul><li>components/AddArticle.tsx</li></ul><pre><code class="language-tsx">import * as React from "react"

type Props = {
  saveArticle: (article: IArticle | any) =&gt; void
}

export const AddArticle: React.FC&lt;Props&gt; = ({ saveArticle }) =&gt; {
  const [article, setArticle] = React.useState&lt;IArticle | {}&gt;()

  const handleArticleData = (e: React.FormEvent&lt;HTMLInputElement&gt;) =&gt; {
    setArticle({
      ...article,
      [e.currentTarget.id]: e.currentTarget.value,
    })
  }

  const addNewArticle = (e: React.FormEvent) =&gt; {
    e.preventDefault()
    saveArticle(article)
  }

  return (
    &lt;form onSubmit={addNewArticle} className="Add-article"&gt;
      &lt;input
        type="text"
        id="title"
        placeholder="Title"
        onChange={handleArticleData}
      /&gt;
      &lt;input
        type="text"
        id="body"
        placeholder="Description"
        onChange={handleArticleData}
      /&gt;
      &lt;button disabled={article === undefined ? true : false}&gt;
        Add article
      &lt;/button&gt;
    &lt;/form&gt;
  )
}
</code></pre><p>Para adicionar um novo artigo, usaremos este componente de formulário. Ele recebe como parâmetro a função <code>saveArticle</code>, que permite adicionar um novo artigo ao repositório.</p><p>O objeto do artigo deve seguir o tipo <code>IArticle</code> para satisfazer os critérios TypeScript.</p><ul><li>components/Article.tsx</li></ul><pre><code class="language-tsx">import * as React from "react"
import { Dispatch } from "redux"
import { useDispatch } from "react-redux"

type Props = {
  article: IArticle
  removeArticle: (article: IArticle) =&gt; void
}

export const Article: React.FC&lt;Props&gt; = ({ article, removeArticle }) =&gt; {
  const dispatch: Dispatch&lt;any&gt; = useDispatch()

  const deleteArticle = React.useCallback(
    (article: IArticle) =&gt; dispatch(removeArticle(article)),
    [dispatch, removeArticle]
  )

  return (
    &lt;div className="Article"&gt;
      &lt;div&gt;
        &lt;h1&gt;{article.title}&lt;/h1&gt;
        &lt;p&gt;{article.body}&lt;/p&gt;
      &lt;/div&gt;
      &lt;button onClick={() =&gt; deleteArticle(article)}&gt;Delete&lt;/button&gt;
    &lt;/div&gt;
  )
}
</code></pre><p>O componente <code>Article</code> mostra um objeto de artigo.</p><p>A função <code>removeArticle</code> deve fazer o <em>dispatching</em> para acessar o repositório e, em seguida, excluir um determinado artigo. Essa é a razão pela qual usamos o <em>hook</em> <code>useDispatch</code> aqui, que permite que o Redux complete a ação de remoção.</p><p>Por conseguinte, o uso de <code>useCallback</code> ajuda a evitar renderizações desnecessárias ao memorizar valores como dependências.</p><p>Finalmente, temos os componentes que precisamos para adicionar e mostrar os artigos. Agora, vamos adicionar a última peça ao quebra-cabeça, usando tudo isso no arquivo <code>App.tsx</code>.</p><ul><li>App.tsx</li></ul><pre><code class="language-tsx">import * as React from "react"
import { useSelector, shallowEqual, useDispatch } from "react-redux"
import "./styles.css"

import { Article } from "./components/Article"
import { AddArticle } from "./components/AddArticle"
import { addArticle, removeArticle } from "./store/actionCreators"
import { Dispatch } from "redux"

const App: React.FC = () =&gt; {
  const articles: readonly IArticle[] = useSelector(
    (state: ArticleState) =&gt; state.articles,
    shallowEqual
  )

  const dispatch: Dispatch&lt;any&gt; = useDispatch()

  const saveArticle = React.useCallback(
    (article: IArticle) =&gt; dispatch(addArticle(article)),
    [dispatch]
  )

  return (
    &lt;main&gt;
      &lt;h1&gt;My Articles&lt;/h1&gt;
      &lt;AddArticle saveArticle={saveArticle} /&gt;
      {articles.map((article: IArticle) =&gt; (
        &lt;Article
          key={article.id}
          article={article}
          removeArticle={removeArticle}
        /&gt;
      ))}
    &lt;/main&gt;
  )
}

export default App
</code></pre><p>O <em>hook</em> <code>useSelector</code> permite o acesso ao estado do repositório. Aqui, passamos o <code>shallowEqual</code> como um segundo argumento para o método, de modo a dizer ao Redux para usar a igualdade rasa (<em>shallow equality</em>, em inglês) ao verificar as alterações.</p><p>Em seguida, contamos com <code>useDispatch</code> para fazer o <em>dispatching </em>de uma ação com o propósito de adicionar artigos no repositório. Por fim, percorremos o array de artigos e passamos cada um deles para o componente <code>Article</code> para que seja mostrado.</p><p>Com isso, podemos navegar até a raiz do projeto e executar este comando:</p><pre><code class="language-shell">  yarn start
</code></pre><p>No <code>npm</code>:</p><pre><code class="language-shell">  npm start
</code></pre><p>Se você abrir <code>http://localhost:3000/</code> no navegador, deverá ver isto:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/mxuc7kv9gtkiuuxdf4hx.png" class="kg-image" alt="mxuc7kv9gtkiuuxdf4hx" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/10/mxuc7kv9gtkiuuxdf4hx.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/10/mxuc7kv9gtkiuuxdf4hx.png 752w" sizes="(min-width: 720px) 720px" width="752" height="725" loading="lazy"></figure><p>Ótimo! Nossa aplicação está funcionando. Com isso, terminamos de mostrar o uso do Redux em uma aplicação do React com TypeScript.</p><p>Você pode encontrar o projeto completo <a href="https://codesandbox.io/s/react-redux-typescript-oc4hi">nesta CodeSandbox</a>.</p><p>Você pode encontrar outros conteúdos excelentes como este no <a href="https://www.ibrahima-ndaw.com/">blog do autor</a> ou segui-lo no <a href="https://twitter.com/ibrahima92_">Twitter</a> para ser notificado sobre novos textos produzidos por ele.</p><p>Obrigado pela leitura.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Redux Thunk explicado com exemplos ]]>
                </title>
                <description>
                    <![CDATA[ Redux Thunk é um middleware que permite retornar funções, em vez de apenas ações, dentro do Redux. Isso permite ações com atraso, incluindo trabalhar com  promises. Um dos principais casos de uso desse middleware é para manipular ações que podem não ser síncronas, como, por exemplo, ao usar o ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/redux-thunk-explicado-com-exemplos/</link>
                <guid isPermaLink="false">62c6298da3520206e79d0c22</guid>
                
                    <category>
                        <![CDATA[ Redux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Sat, 09 Jul 2022 22:58:30 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/5f9c9d13740569d1a4ca35c4-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/redux-thunk-explained-with-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Redux Thunk Explained with Examples</a>
      </p><p>Redux Thunk é um middleware que permite retornar funções, em vez de apenas ações, dentro do Redux. Isso permite ações com atraso, incluindo trabalhar com <em>promises</em>.</p><p>Um dos principais casos de uso desse middleware é para manipular ações que podem não ser síncronas, como, por exemplo, ao usar o <em>axios</em> para enviar uma solicitação GET. O Redux Thunk nos permite fazer o <em>dispatch</em> (envio) dessas ações de forma assíncrona e resolver cada <em>promise</em> que é retornada.</p><h2 id="instala-o-e-configura-o"><strong>Instalação e configuração</strong></h2><p>O Redux Thunk pode ser instalado executando <code>npm install redux-thunk --save</code> ou <code>yarn add redux-thunk</code>na linha de comando, dependendo do gerenciador de pacotes que você utilizar.</p><p>Por ser uma ferramenta do Redux, você naturalmente precisará ter o Redux configurado. Uma vez instalado, ele é ativado usando <code>applyMiddleware()</code>:</p><pre><code class="language-javascript">import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers/index';

const store = createStore(
  rootReducer,
  applyMiddleware(thunk)
);</code></pre><h2 id="como-usar-o-redux-thunk"><strong>Como usar o Redux Thunk</strong></h2><p>Uma vez que o Redux Thunk tenha sido instalado e incluído em seu projeto com <code>applyMiddleware(thunk)</code>, você pode começar a fazer o <em>dispatch</em> das ações de modo assíncrono.</p><p>Por exemplo, esse é um contador simples de incrementos:</p><pre><code class="language-javascript">const INCREMENT_COUNTER = 'INCREMENT_COUNTER';

function increment() {
  return {
    type: INCREMENT_COUNTER
  };
}

function incrementAsync() {
  return dispatch =&gt; {
    setTimeout(() =&gt; {
      // Você pode invocar ações síncronas ou assíncronas com o `dispatch`
      dispatch(increment());
    }, 1000);
  };
}</code></pre><p>Aqui vemos como configurar ações de sucesso e falha após pesquisar uma API:</p><pre><code class="language-javascript">const GET_CURRENT_USER = 'GET_CURRENT_USER';
const GET_CURRENT_USER_SUCCESS = 'GET_CURRENT_USER_SUCCESS';
const GET_CURRENT_USER_FAILURE = 'GET_CURRENT_USER_FAILURE';

const getUser = () =&gt; {
  return (dispatch) =&gt; {     //funções anônimas
    // Ação inicial dispatched (enviada)
    dispatch({ type: GET_CURRENT_USER });
    // Retorno da promise, passando as ações em caso de sucesso ou falha
    return axios.get('/api/auth/user').then(  
      user =&gt; dispatch({ type: GET_CURRENT_USER_SUCCESS, user }),
      err =&gt; dispatch({ type: GET_CURRENT_USER_FAILURE, err })
    );
  };
};</code></pre><h2 id="mais-informa-es-"><strong>Mais Informações:</strong></h2><ul><li><a href="https://www.freecodecamp.org/portuguese/news/como-carregar-dados-no-react-com-redux-thunk-redux-saga-suspense-e-hooks/">Como carregar dados no React com redux-thunk, redux-saga, suspense e hooks</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-implementar-o-redux-em-24-linhas-de-javascript/">Como implementar o Redux em 24 linhas de JavaScript</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-conectar-o-react-ao-redux-um-guia-diagramatico/">Como conectar o React ao Redux — um guia diagramático</a></li></ul> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
