Skip to content

Commit 9ba3ba3

Browse files
author
Seth Lemmons
committed
Handling data Redux - synced code and examples
1 parent 1b1053e commit 9ba3ba3

File tree

10 files changed

+115
-122
lines changed

10 files changed

+115
-122
lines changed

26-redux-data/README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# 26 Handling Data with Redux
2+
3+
This subdirectory contains an app already generated with create-react-app, as
4+
described in the "Handling Data with Redux" blog post (link here)
5+
6+
To run the app server:
7+
8+
```
9+
$ cd a-sync-to-async
10+
$ npm install
11+
$ npm start
12+
```
13+
14+
A browser window will automatically open and will load the app.
15+
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"id": 1,
3-
"name": "Bob Smith",
4-
"email": "bob@smith.com",
5-
"phone": "+1 (321) 123-4567",
6-
"company": "Acme Inc",
7-
"department": "Engineering",
8-
"title": "Senior Software Engineer"
9-
}
3+
"name": "Don Draper",
4+
"email": "don.draper@scdp.com",
5+
"phone": "+1 (212) 555-0112",
6+
"company": "Sterling Cooper Draper Pryce",
7+
"department": "Marketing",
8+
"title": "Creative Director"
9+
}
Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,4 @@
11
import React, { Component } from 'react'
2-
import logo from './logo.svg'
3-
import './App.css'
42
import Form from './containers/user/Update'
53

6-
class App extends Component {
7-
render() {
8-
return (
9-
<div className="App">
10-
<header className="App-header">
11-
<img src={logo} className="App-logo" alt="logo" />
12-
<h1 className="App-title">Welcome to React</h1>
13-
</header>
14-
<p className="App-intro">
15-
To get started, edit <code>src/App.js</code> and save to reload.
16-
</p>
17-
<Form />
18-
</div>
19-
)
20-
}
21-
}
22-
23-
export default App
4+
export default () => <Form />;
Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
import {
2-
LOAD_USER, loadUser,
3-
UPDATE_USER, updateUser
4-
} from './user'
1+
import { LOAD_USER, loadUser, UPDATE_USER, updateUser } from './user';
52

6-
export {
7-
LOAD_USER, loadUser,
8-
UPDATE_USER, updateUser
9-
}
3+
export { LOAD_USER, loadUser, UPDATE_USER, updateUser };
Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,37 @@
1-
export const LOADING_USER = 'LOADING_USER'
2-
export const LOAD_USER = 'LOAD_USER'
3-
export const LOAD_USER_ERROR = 'LOAD_USER_ERROR'
4-
export const UPDATE_USER = 'UPDATE_USER'
1+
export const LOADING_USER = 'LOADING_USER';
2+
export const LOAD_USER = 'LOAD_USER';
3+
export const LOAD_USER_ERROR = 'LOAD_USER_ERROR';
4+
export const UPDATE_USER = 'UPDATE_USER';
55

6-
export function loadUser (id) {
6+
export function loadUser(id) {
77
return dispatch => {
88
dispatch({
99
type: LOADING_USER,
1010
data: {
1111
id
1212
}
13-
})
13+
});
1414

1515
return fetch('/user.json')
1616
.then(res => res.json())
1717
.then(
18-
data => dispatch({
19-
type: LOAD_USER,
20-
data
21-
}),
22-
error => dispatch({
23-
type: LOAD_USER_ERROR,
24-
error
25-
})
26-
)
27-
}
18+
data =>
19+
dispatch({
20+
type: LOAD_USER,
21+
data
22+
}),
23+
error =>
24+
dispatch({
25+
type: LOAD_USER_ERROR,
26+
error
27+
})
28+
);
29+
};
2830
}
2931

30-
export function updateUser (change) {
32+
export function updateUser(change) {
3133
return {
3234
change,
3335
type: UPDATE_USER
34-
}
36+
};
3537
}
Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,45 @@
1-
import React from 'react'
1+
import React from 'react';
22

3-
const renderField = (props, name, label = name.substr(0, 1).toUpperCase() + name.substr(1)) => (
4-
<div>
5-
<label>
3+
const renderField = (
4+
props,
5+
name,
6+
label = name.substr(0, 1).toUpperCase() + name.substr(1)
7+
) => (
8+
<div style={{ marginBottom: '12px' }}>
9+
<label style={{textTransform: 'capitalize'}}>
610
{label}
711
<input
812
type="text"
913
name={name}
10-
value={props[ name ]}
14+
value={props[name]}
1115
onChange={props.onFieldChange}
12-
/>
16+
style={{ marginLeft: '12px' }}
17+
/>
1318
</label>
1419
</div>
15-
)
20+
);
1621

17-
const Form = (props) => {
18-
props.loadUser(props.id)
22+
const Form = props => {
23+
props.loadUser(props.id);
24+
25+
const submit = e => {
26+
e.preventDefault();
27+
28+
// do submit
29+
};
1930

2031
return (
2132
<form>
22-
<div>ID: {props.id}</div>
23-
{ renderField(props, 'name') }
24-
{ renderField(props, 'email') }
25-
{ renderField(props, 'phone', 'Phone Number') }
26-
{ renderField(props, 'company') }
27-
{ renderField(props, 'department') }
28-
{ renderField(props, 'title') }
33+
{renderField(props, 'name')}
34+
{renderField(props, 'email')}
35+
{renderField(props, 'phone', 'Phone Number')}
36+
{renderField(props, 'company')}
37+
{renderField(props, 'department')}
38+
{renderField(props, 'title')}
39+
40+
<button onClick={submit}>Submit</button>
2941
</form>
30-
)
31-
}
42+
);
43+
};
3244

33-
export default Form
45+
export default Form;
Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
1-
import { connect } from 'react-redux'
2-
import { loadUser, updateUser } from '../../actions'
3-
import Form from '../../components/user/Form'
1+
import { connect } from 'react-redux';
2+
import { loadUser, updateUser } from '../../actions';
3+
import Form from '../../components/user/Form';
44

5-
const mapStateToProps = state => Object.assign({}, state.user)
5+
const mapStateToProps = state => Object.assign({}, state.user);
66

77
const mapDispatchToProps = dispatch => ({
88
loadUser: id => dispatch(loadUser(id)),
99

1010
onFieldChange: e => {
11-
const { name, value } = e.target
12-
const change = { [ name ]: value }
11+
const { name, value } = e.target;
12+
const change = { [name]: value };
1313

14-
dispatch(updateUser(change))
14+
dispatch(updateUser(change));
1515
}
16-
})
16+
});
1717

18-
export default connect(
19-
mapStateToProps,
20-
mapDispatchToProps
21-
)(Form)
18+
export default connect(mapStateToProps, mapDispatchToProps)(Form);
Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,21 @@
1-
import React from 'react'
2-
import ReactDOM from 'react-dom'
3-
import './index.css'
4-
import App from './App'
5-
import registerServiceWorker from './registerServiceWorker'
6-
import { Provider } from 'react-redux'
7-
import { applyMiddleware, createStore } from 'redux'
8-
import thunk from 'redux-thunk'
9-
import userApp from './reducers'
10-
import { composeWithDevTools } from 'redux-devtools-extension'
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import './index.css';
4+
import App from './App';
5+
import registerServiceWorker from './registerServiceWorker';
6+
import { Provider } from 'react-redux';
7+
import { applyMiddleware, createStore } from 'redux';
8+
import thunk from 'redux-thunk';
9+
import userApp from './reducers';
10+
import { composeWithDevTools } from 'redux-devtools-extension';
1111

12-
const store = createStore(
13-
userApp,
14-
composeWithDevTools(
15-
applyMiddleware(thunk)
16-
)
17-
)
12+
const store = createStore(userApp, composeWithDevTools(applyMiddleware(thunk)));
1813

1914
ReactDOM.render(
2015
<Provider store={store}>
2116
<App />
2217
</Provider>,
2318
document.getElementById('root')
24-
)
19+
);
2520

26-
registerServiceWorker()
21+
registerServiceWorker();
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { combineReducers } from 'redux'
2-
import user from './user'
1+
import { combineReducers } from 'redux';
2+
import user from './user';
33

4-
const userApp = combineReducers({ user })
4+
const userApp = combineReducers({ user });
55

6-
export default userApp
6+
export default userApp;
Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
1-
import { LOAD_USER, UPDATE_USER } from '../actions'
1+
import { LOAD_USER, UPDATE_USER } from '../actions';
22

33
const DEFAULT_USER = {
44
id: 0,
5-
name: '', email: '', phone: '',
6-
company: '', department: '', title: ''
7-
}
5+
name: '',
6+
email: '',
7+
phone: '',
8+
company: '',
9+
department: '',
10+
title: ''
11+
};
812

9-
function user (user = DEFAULT_USER, action) {
13+
function user(user = DEFAULT_USER, action) {
1014
switch (action.type) {
1115
case UPDATE_USER:
12-
return Object.assign(
13-
{},
14-
user,
15-
action.change
16-
)
16+
return Object.assign({}, user, action.change);
1717
case LOAD_USER:
18-
return Object.assign(
19-
{},
20-
action.data
21-
)
18+
return Object.assign({}, action.data);
2219
default:
23-
return user
20+
return user;
2421
}
2522
}
2623

27-
export default user
24+
export default user;

0 commit comments

Comments
 (0)