L10: Data!
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
colors: [],
};
}
componentDidMount() {
fetch('http://localhost:2466/colors')
.then(res => res.json())
.then(colors => this.setState({colors}));
}
render() {
return <div>
{this.state.colors.map(
color => <Color
key={color.color}
color={color.color}
hex={color.hex}/>
)}
</div>;
}
}
{
messages: [
// ...
],
contactInfo: {
// ...
}
}// Can be used with any view lib (not just React)
npm install --save reduxfunction reducer(
state = {
messages: [],
contactInfo: {}
}, action) {
switch (action.type) {
case 'ADD_MESSAGE':
return {
messages: [...state.messages, action.data],
contactInfo: state.contactInfo,
};
case 'UPDATE_CONTACT_INFO':
return {
messages: state.messages,
contactInfo: action.data,
};
default: return state;
}
}
import { createStore } from 'redux';
import theReducer from './reducer.js';
const store = createStore(reducer);// from the reducer
case 'ADD_MESSAGE':
return {
messages: [...state.messages, action.data],
contactInfo: state.contactInfo,
};
// updating the state
store.dispatch({
type: 'ADD_MESSAGE',
data: {name: 'A', email: 'b@c.d', message: 'fghijklmn'},
});// React bindings
npm install --save react-reduximport { connect } from 'react-redux'
// ...
class App extends React.Component {
// ...
}
function mapStateToProps(state) {
return {};
}
function mapDispatchToProps(dispatch) {
return {};
}
const ConnectedApp = connect(
mapStateToProps,
mapDispatchToProps
)(App);
export default ConnectedApp;import { Provider } from 'react-redux';
// ...
render((
<Provider store={store}>
<App .../>
</Provider>
), document.getElementById('container'));
function mapStateToProps(state) {
return {
messages: state.messages,
};
};
function mapDispatchToProps(dispatch) {
return {
addMessage: message => dispatch({
type: 'ADD_MESSAGE',
data: message
}),
};
};// render
<AdminPanel title="All messages"
messages={this.props.messages}/>
// elsewhere
.then(message => {
this.props.addMessage(message);
})var app = require('express')();
var mongoose = require('mongoose');
app.use(require('body-parser').json());
var personSchema = new mongoose.Schema({
name: { type: String, required: true }
});
var Person = mongoose.model('Person', personSchema);
app.get('/person', function(req, res) {
var person = new Person({
name: 'Martin'
});
res.send(person);
});
app.listen(1234);