freeCodeCamp/guide/english/redux/redux-reducers/index.md

48 lines
2.0 KiB
Markdown

---
title: Redux Reducers
---
## Redux Reducers
Redux reducers allow you to make changes to your state in your application. While Redux actions inform the application about events that happened (eg click/scroll events), Redux reducers allow you to change the state of the application.
Now a reducer in redux needs to be a pure function. A pure function is a type of function that does not have additional side-effects. You pass it some arguments and it returns the expected result. For example:
```javascript
function add(a,b) {
return a + b;
}
const sum = add(5,4);
```
The above function is pure because no matter what happens it will return 9. A function that has ajax calls inside of it or does something like accessing a database is not a pure function. Even if we mutate meaning change a variable value can be considered not a pure function.
Now to make changes to the state you use a reducer. Here is an example code of a reducer:
```javascript
function todoReducer(state= [],action) {
case 'ADD_TODO':
return [...state,action.data]
case 'DELETE_TODO':
return state.filter(todo=>todo.id !== action.id)
default:
return state;
}
```
What this todoReducer is doing is that it takes in the current state and the action that was triggered and then returns a new state. Here we used the es6 default parameter syntax to assign a default value to the state array. The action object for the above reducer may look like the following:
```javascript
{
type: 'ADD_TODO',
data: {name: 'Learn Redux',completed:false}
}
```
Here the action has a type property of 'ADD_TODO' with a data object. Now when this action is triggered it is received by the reducer and then based on the switch statement it will return a new array with the existing data alongside the new data.
So to sum up reducers are nothing but pure functions that returns new state for your application.
#### More Information:
[Redux-Reducers Official Docs](https://redux.js.org/basics/reducers)