2018-10-10 18:03:03 -04:00
---
id: 5a24c314108439a4d4036147
2021-02-06 04:42:36 +00:00
title: Connect Redux to React
2018-10-10 18:03:03 -04:00
challengeType: 6
2020-09-07 16:11:48 +08:00
forumTopicId: 301426
2021-01-13 03:31:00 +01:00
dashedName: connect-redux-to-react
2018-10-10 18:03:03 -04:00
---
2020-12-16 00:37:30 -07:00
# --description--
2021-02-06 04:42:36 +00:00
Now that you've written both the `mapStateToProps()` and the `mapDispatchToProps()` functions, you can use them to map `state` and `dispatch` to the `props` of one of your React components. The `connect` method from React Redux can handle this task. This method takes two optional arguments, `mapStateToProps()` and `mapDispatchToProps()` . They are optional because you may have a component that only needs access to `state` but doesn't need to dispatch any actions, or vice versa.
2020-12-16 00:37:30 -07:00
2021-02-06 04:42:36 +00:00
To use this method, pass in the functions as arguments, and immediately call the result with your component. This syntax is a little unusual and looks like:
2018-10-10 18:03:03 -04:00
2020-12-16 00:37:30 -07:00
`connect(mapStateToProps, mapDispatchToProps)(MyComponent)`
2018-10-10 18:03:03 -04:00
2021-02-06 04:42:36 +00:00
**Note:** If you want to omit one of the arguments to the `connect` method, you pass `null` in its place.
2018-10-10 18:03:03 -04:00
2020-12-16 00:37:30 -07:00
# --instructions--
2018-10-10 18:03:03 -04:00
2021-02-06 04:42:36 +00:00
The code editor has the `mapStateToProps()` and `mapDispatchToProps()` functions and a new React component called `Presentational` . Connect this component to Redux with the `connect` method from the `ReactRedux` global object, and call it immediately on the `Presentational` component. Assign the result to a new `const` called `ConnectedComponent` that represents the connected component. That's it, now you're connected to Redux! Try changing either of `connect` 's arguments to `null` and observe the test results.
2018-10-10 18:03:03 -04:00
2020-12-16 00:37:30 -07:00
# --hints--
2018-10-10 18:03:03 -04:00
2021-02-06 04:42:36 +00:00
The `Presentational` component should render.
2018-10-10 18:03:03 -04:00
```js
2020-12-16 00:37:30 -07:00
assert(
(function () {
const mockedComponent = Enzyme.mount(React.createElement(AppWrapper));
return mockedComponent.find('Presentational').length === 1;
})()
2020-09-07 16:11:48 +08:00
);
2018-10-10 18:03:03 -04:00
```
2021-02-06 04:42:36 +00:00
The `Presentational` component should receive a prop `messages` via `connect` .
2018-10-10 18:03:03 -04:00
2020-12-16 00:37:30 -07:00
```js
assert(
(function () {
const mockedComponent = Enzyme.mount(React.createElement(AppWrapper));
const props = mockedComponent.find('Presentational').props();
return props.messages === '__INITIAL__STATE__';
})()
);
```
2018-10-10 18:03:03 -04:00
2021-02-06 04:42:36 +00:00
The `Presentational` component should receive a prop `submitNewMessage` via `connect` .
2020-09-07 16:11:48 +08:00
2018-10-10 18:03:03 -04:00
```js
2020-12-16 00:37:30 -07:00
assert(
(function () {
const mockedComponent = Enzyme.mount(React.createElement(AppWrapper));
const props = mockedComponent.find('Presentational').props();
return typeof props.submitNewMessage === 'function';
})()
);
2018-10-10 18:03:03 -04:00
```
2020-08-13 17:24:35 +02:00
2021-01-13 03:31:00 +01:00
# --seed--
## --after-user-code--
```jsx
const store = Redux.createStore(
(state = '__INITIAL__STATE__', action) => state
);
class AppWrapper extends React.Component {
render() {
return (
< ReactRedux.Provider store = {store} >
< ConnectedComponent / >
< / ReactRedux.Provider >
);
}
};
ReactDOM.render(< AppWrapper / > , document.getElementById('root'))
```
## --seed-contents--
```jsx
const addMessage = (message) => {
return {
type: 'ADD',
message: message
}
};
const mapStateToProps = (state) => {
return {
messages: state
}
};
const mapDispatchToProps = (dispatch) => {
return {
submitNewMessage: (message) => {
dispatch(addMessage(message));
}
}
};
class Presentational extends React.Component {
constructor(props) {
super(props);
}
render() {
return < h3 > This is a Presentational Component< / h3 >
}
};
const connect = ReactRedux.connect;
// Change code below this line
```
2020-12-16 00:37:30 -07:00
# --solutions--
2021-01-13 03:31:00 +01:00
```jsx
const addMessage = (message) => {
return {
type: 'ADD',
message: message
}
};
const mapStateToProps = (state) => {
return {
messages: state
}
};
const mapDispatchToProps = (dispatch) => {
return {
submitNewMessage: (message) => {
dispatch(addMessage(message));
}
}
};
class Presentational extends React.Component {
constructor(props) {
super(props);
}
render() {
return < h3 > This is a Presentational Component< / h3 >
}
};
const connect = ReactRedux.connect;
// Change code below this line
const ConnectedComponent = connect(mapStateToProps, mapDispatchToProps)(Presentational);
```