Introdução
Neste tutorial, vamos explorar como desenvolver interfaces altamente responsivas utilizando o framework React juntamente com a biblioteca Redux para gerenciamento eficiente de estado. A responsividade é uma característica essencial para aplicações modernas, permitindo que os usuários tenham uma experiência suave e dinâmica, independentemente do dispositivo que estão usando. Aprenderemos desde a configuração do ambiente de desenvolvimento até a implementação de componentes, gerenciamento de estado com Redux e testes unitários. Este guia é ideal para desenvolvedores que desejam aprofundar seus conhecimentos em React e Redux, criando aplicações interativas e escaláveis.
Etapas
Configuração do Ambiente de Desenvolvimento
Certifique-se de ter o Node.js e o npm (Node Package Manager) instalados em sua máquina. Você pode verificar se já tem as ferramentas instaladas usando os comandos `node -v` e `npm -v`. Caso não tenha, baixe e instale a versão mais recente do Node.js do site oficial.
commands# Verificar versões instaladas
node -v
npm -vCriação do Projeto React
Utilize a ferramenta Create React App para gerar um novo projeto React. No terminal, execute o comando abaixo, substituindo ‘minha-aplicacao’ pelo nome da sua aplicação.
commandsnpx create-react-app minha-aplicacao
cd minha-aplicacaoInstalação do Redux e React-Redux
Instale o Redux e a biblioteca React-Redux para gerenciar o estado da sua aplicação de forma eficiente. Execute o comando abaixo para adicionar essas bibliotecas ao seu projeto.
commandsnpm install redux react-redux
Estrutura do Projeto
Organize a estrutura do seu projeto para incluir pastas para ações, redutores e componentes. A estrutura pode ser similar a esta:
– src/
– actions/
– reducers/
– components/
– App.js
– index.jsEssa organização ajuda a manter o projeto escalável e fácil de manter.
foldersactions
reducers
componentsCriação de Ações do Redux
Crie um arquivo para gerenciar as ações do Redux. No diretório `actions`, crie um arquivo chamado `actions.js` e defina as ações que alteram o estado da aplicação.
actions.jsexport const ADD_TODO = 'ADD_TODO'; export const addTodo = (todo) => { return { type: ADD_TODO, payload: todo }; };
Criação do Redutor do Redux
No diretório `reducers`, crie um arquivo chamado `todoReducer.js` e defina o redutor que manipula as ações e atualiza o estado da aplicação.
todoReducer.jsimport { ADD_TODO } from '../actions/actions'; const initialState = { todos: [] }; const todoReducer = (state = initialState, action) => { switch (action.type) { case ADD_TODO: return { ...state, todos: [...state.todos, action.payload] }; default: return state; } }; export default todoReducer;
Configuração da Store do Redux
No arquivo `index.js`, configure a store do Redux e forneça-a ao seu aplicativo React. Certifique-se de importar o `Provider` do `react-redux` e o redutor que você criou.
index.jsimport React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; import todoReducer from './reducers/todoReducer'; import App from './App'; const store = createStore(todoReducer); ReactDOM.render( <Provider store={store}> <App /> </Provider>, document.getElementById('root') );
Criação do Componente de Todo
Crie um componente que permitirá ao usuário adicionar tarefas (todos) à lista. No diretório `components`, crie um arquivo chamado `Todo.js` e implemente o componente.
Todo.jsimport React, { useState } from 'react'; import { useDispatch } from 'react-redux'; import { addTodo } from '../actions/actions'; const Todo = () => { const [inputValue, setInputValue] = useState(''); const dispatch = useDispatch(); const handleAddTodo = () => { if (inputValue) { dispatch(addTodo(inputValue)); setInputValue(''); } }; return ( <div> <input type="text" value={inputValue} onChange={(e) => setInputValue(e.target.value)} /> <button onClick={handleAddTodo}>Adicionar Todo</button> </div> ); }; export default Todo;
Renderização da Lista de Todos
No componente `App.js`, importe o componente `Todo` e renderize a lista de tarefas utilizando o estado gerenciado pelo Redux.
App.jsimport React from 'react'; import { useSelector } from 'react-redux'; import Todo from './components/Todo'; const App = () => { const todos = useSelector(state => state.todos); return ( <div> <h1>Minha Lista de Todos</h1> <Todo /> <ul>{todos.map((todo, index) => <li key={index}>{todo}</li>)}</ul> </div> ); }; export default App;
Implementação de Testes Unitários
Utilize a biblioteca Jest, que já vem configurada com o Create React App, para criar testes unitários. Crie um arquivo chamado `Todo.test.js` para validar a lógica do componente todo.
Todo.test.jsimport React from 'react'; import { render, fireEvent } from '@testing-library/react'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; import todoReducer from '../reducers/todoReducer'; import Todo from './Todo'; const renderWithRedux = ( component, { initialState, store = createStore(todoReducer, initialState) } = {} ) => { return { ...render(<Provider store={store}>{component}</Provider>), store }; }; test('adiciona um todo', () => { const { getByText, getByRole } = renderWithRedux(<Todo />); fireEvent.change(getByRole('textbox'), { target: { value: 'Novo Todo' } }); fireEvent.click(getByText(/adicionar todo/i)); expect(getByText('Novo Todo')).toBeInTheDocument(); });
Executando a Aplicação e Testes
Use o comando npm para compilar e executar a aplicação. Utilize também ferramentas como Postman ou o console do navegador para interagir com a aplicação e verificar se o estado está sendo gerenciado adequadamente. Para executar os testes unitários, utilize o comando abaixo.
commands# Compilar e executar a aplicação
npm start
# Executar os testes unitários
npm test
Conclusão
Neste tutorial, você aprendeu a desenvolver uma interface altamente responsiva utilizando React e Redux. Desde a configuração do ambiente de desenvolvimento até a criação de ações e redutores, você agora tem a base necessária para criar aplicações escaláveis e interativas. A capacidade de gerenciar o estado de forma eficiente utilizando Redux é uma habilidade vital para qualquer desenvolvedor front-end. Com as dicas e códigos apresentados, você pode continuar a expandir suas aplicações e explorar mais recursos do React e Redux.