DEV Community

Cover image for Understand React Redux - Introduction
Ebraim Carvalho
Ebraim Carvalho

Posted on

Understand React Redux - Introduction

This month, I started to learn more about Redux, so I decided to write a basic post with my knowledge of Redux with React. I am also learning, so correct me if there is an error.

For Redux, you need some things:

  • Reducer: A function that manages your actions and return a new state;
  • Actions: A function that tells your reducer what it needs to do;
  • Store: A state that will pass to our application;

There is a recomendation to focus our variables that define our actions, defining a string to a constant.

Let's look at an example, first our Reducer and Actions:

// our constant with a string type const ADD = 'ADD'; // our action creator, needs to be a pure function const addMessage = (message) => { return { type: ADD, message: message } } // our reducer, also needs to be a pure function const messageReducer = (state = [], action) => { switch(action.type) { case ADD : // join the new message with the others return [...state, action.message] default : return state } } // need to import {createStore} from 'redux' const store = createStore(messageReducer) 

That's it, our state are ready. Now we need to call it on our component to read the state or send an action. Let's see how we can do that:

import {useState} from 'react'; import { Provider, connect } from "react-redux"; const Presentational = (props) => { const [input, setInput] = useState('') const handleChange = (e) => { setInput(e.target.value) } const handleSubmit = () => { // we can call through the props because we use mapDispatchToProps below props.submitNewMessage(input) setInput('') } return ( <div> <h2>Type a new message:</h2>  <input type="text" value={input} onChange={handleChange} />  <button onClick={handleSubmit}>Submit new message</button>  <ul> // we can read through the props because we use mapStateToProps below {props.messages.map((message, index) => ( <li key={index}>{message}</li>  ))} </ul>  </div>  ) } const mapStateToProps = (state) => { return {messages: state} }; const mapDispatchToProps = (dispatch) => { // if we has another action, we will pass in this object return { submitNewMessage: (message) => { dispatch(addMessage(message)) } } } // connect all of this things in a Container wrapper const Container = connect(mapStateToProps, mapDispatchToProps)(Presentational); const App = () => { return ( // here the magic happens <Provider store={store}> <Container /> </Provider>  ) } 

That's it, I'm learning and that's what I understood so far, what did you think of redux?

Top comments (0)