3.0 KiB
Integrating Redux
Redux has become somewhat of a buzz word in the React community, and is generally used in most projects without thought. This Codorial won't go into details on what it is as their own documentation does a wonderful job at explaining what it's for and why to use it.
TLDR; Redux provides your app with a single "state" (data), which can be accessed by any component. You can subscribe to this data to cause a component update whenever something changes, even if it's deeply nested.
Although the end product of this Codorial certainly doesn't require Redux to function, as your app grows in complexity Redux becomes more and more important to manage your data.
Installing Redux
Lets go ahead by installing the core Redux library and the React bindings:
npm install --save redux react-redux
Now within our projects src
directory, create a store.js
file. This file will contain all of our Redux logic, however you may want to break
this out into multiple directories as your projects grows in complexity.
// src/store.js
import { createStore } from 'redux';
// Create a reducer with empty state (see below for explanation)
function reducer(state = {}, action) {
return state;
}
export default createStore(reducer);
By default state is null
, however we're setting it to an empty object
(state = {}
) so we can attempt to access
shallow nested properties even if they don't exist.
You may want to consider installing the redux-logger library to improve your Redux experience.
Reducer
A reducer is a simple JavaScript function which takes two arguments: state
& action
. The idea of a reducer is to take "some data" from an action
and return new state.
state
is any sort of data, which cannot be altered (immutable). A reducer must return a new value each time. More on this later.action
is an object containing atype
, and any unreduced data. More on this later.
Integrating Redux into the app
Our Redux store is now ready to be used. react-redux
provides us with a Provider
component which "provides" any children
with access to the store via context. Luckily we don't need to worry about this too much as the library
takes care of the hard work!
Back within our original bootstrap file, we'll wrap the App
component in the Provider
component, so our business logic has access to Redux.
// src/index.js
import React, { Component } from 'react';
import { Provider } from 'react-redux'; // Import the Provider component
import App from './App';
import store from './store';
function bootstrap() {
// Init any external libraries here!
return class extends Component {
render() {
return (
<Provider store={store}>
<App />
</Provider>
);
}
};
}
export default bootstrap;
Although noting will visually change, our app now has access to the power of Redux!