# Checklist do Redux *Antes de começar* - [x] pensar como será o *formato* do seu estado global - [x] pensar quais actions serão necessárias na sua aplicação *Instalação* - [x] npx create-react-app my-app-redux; - [x] npm install --save redux react-redux; - [x] npm install --save @redux-devtools/extension *Criar dentro do diretório `src`:* - [x] diretório `redux` *Criar dentro do diretório `redux`* - [x] arquivo `store.js` - [x] diretório `actions` - [x] diretório `reducers` *Criar dentro do diretório `actions`:* - [x] arquivo `index.js`. *Criar dentro do diretório `reducers`:* - [x] arquivo `index.js`. *Criar dentro do arquivo `redux/store.js`:* - [x] importar o createStore - [x] configurar o [Redux DevTools](https://github.com/reduxjs/redux-devtools) - [x] importar o rootReducer - [x] criar e exportar a store Exemplo: ```js import { legacy_createStore as createStore } from 'redux'; import { composeWithDevTools } from '@redux-devtools/extension'; import rootReducer from './reducers'; const store = createStore(rootReducer, composeWithDevTools()); export default store; ``` *Criar dentro do arquivo `redux/reducers/index.js`:* - [x] estado inicial - [x] criar função reducer com `switch` retornando apenas a opção `default` - [x] criar `rootReducer` usando o `combineReducers` - [x] exportar `rootReducer` Exemplo: ```js import { combineReducers } from 'redux'; const INITIAL_STATE = {}; const exampleReducer = (state = INITIAL_STATE, action) => { switch(action.type) { default: return state; } } const rootReducer = combineReducers({ exampleReducer }) export default rootReducer; ``` *No arquivo `index.js`:* - [ ] importar a `store` - [x] importar o `Provider`, para fornecer os estados a todos os componentes encapsulados pelo `` Exemplo: ```js // Na importação import { Provider } from 'react-redux'; import store from './redux/store' ``` ```js // No render ``` *Na pasta `actions/index.js`:* - [ ] criar e exportar os actionTypes Exemplo: ```js // ACTIONS TYPES export const ADD_EMAIL = 'ADD_EMAIL'; ``` - [ ] criar e export os actions creators necessários Exemplo: ```js // ACTIONS CREATORS export const addEmail = (email) => ({ type: ADD_EMAIL, email, }) ``` *Nos reducers:* - [ ] criar os casos para cada action criada, retornando o devido estado atualizado *Nos componentes que irão ler o estado:* - [ ] criar a função `mapStateToProps` - [ ] exportar usando o `connect` ```js // No import import { connect } from 'react-redux'; // Acesso ao estado global const mapStateToProps = (state) => ({ email: state.email, }); // No export export default connect(mapStateToProps)(Component) ``` *Nos componentes que irão modificar o estado:* - [ ] Importar a action creator a ser utilizada - [ ] Desconstruir o dispatch via props - [ ] Utilizar a função dispatch para enviar a action ao reducer ```js // No import import { addEmail } from './redux/actions'; // Disparando a action const handleClick = () => { const { dispatch } = this.props; dispatch(addEmail('teste@teste.com')); } ```