React & Redux

30
REACT 101 INTRODUCTION FOR DEVELOPERS

Transcript of React & Redux

Page 1: React & Redux

REACT 101INTRODUCTION FOR DEVELOPERS

Page 2: React & Redux

REACTA JavaScript library for building UIs, developed by Facebook.

Page 3: React & Redux

COMPANIES USING REACT

Page 4: React & Redux

render State !-> View

Page 5: React & Redux

STATE

[ “Design incredible app”, “Something happens”, “Collect profits” ]

Page 6: React & Redux

VIEW

<ol> <li>Design incredible app!</li> <li>Something happens!</li> <li>Collect profits!</li> !</ol>

Page 7: React & Redux

VIRTUAL DOM

Page 8: React & Redux

DEFINING COMPONENTS

function MyComponent(state) { return (

<span className=“counter”> {state.count} #</span> )

}

Page 9: React & Redux

DEFINING COMPONENTS

function MyComponent(props) { return (

<span className=“counter”> {props.count} #</span> );

}

Page 10: React & Redux

RENDERING COMPONENTS

ReactDOM.render( <MyComponent count={5} #/> document.getElementById(‘root’) );

Page 11: React & Redux

CLASS-BASED COMPONENTS

var MyComponent = React.createClass({ render: function() { return (

<span className=“counter”> {this.props.count} #</span> );

} }

Page 12: React & Redux

CLASS BASED COMPONENTS (ECMASCRIPT 6 FTW!)

const MyComponent = React.createClass({ render() { return (

<span className=“counter”> {this.props.count} #</span> );

} }

Page 13: React & Redux

INTERACTIVITY

const MyComponent = React.createClass({ getInitialState() { return { count: 0 }; }

handleClick(event) { this.setState({ count: count + 1 }); },

render() { return (

<span className=“counter” onClick={this.handleClick}> {this.state.count} #</span>

); } }

Page 14: React & Redux

PROP TYPE-CHECKING

const MyComponent = React.createClass({ propTypes: { count: React.PropTypes }, %%... }

Page 15: React & Redux

ROUTING WITH REACT-ROUTER

ReactDOM.render((

<Router history={browserHistory}>

<Route path="/" component={App}>

<Route path="tasks" component={Tasks}#/>

<Route path="/task/:taskId" component={TaskDetails}%/>

<Route path="*" component={NoMatch}%/>

#</Route>

#</Router>

), document.body)

Page 16: React & Redux

INTERNATIONALIZATION WITH REACT-INTL

const MyComponent = React.createClass({ mixins: [IntlMixin],

render() { return (

<span className=“counter”> {this.getIntlMessage(‘counter.label’)} #</span> );

} }

Page 17: React & Redux

FLUX ARCHITECTURE

Page 18: React & Redux

REDUXPredictable state container for React developed by Dan Abramov.

Page 19: React & Redux

store (State, Action) !-> State

Page 20: React & Redux

PRINCIPLES

➤ Single source of truth

➤ Read-only state

➤ Changes are made with pure functions

Page 21: React & Redux

ACTIONS

function createTask(description) { return { type: ‘CREATE_TASK’, description: description }; }

Page 22: React & Redux

STORE INTERFACE

store.dispatch(

actions.createTask(”Do homework.”)

);

store.getState();

store.subscribe(function(state) {

'// do something when state changes

});

Page 23: React & Redux

REDUX BINDINGS FOR REACT

<Provider store={store}>

#</Provider>

———————————————————————————————————————————————————

connect((state) )=> {

counter: state.counter

})(MyComponent)

Page 24: React & Redux

ASYNC ACTIONS

function createTask(description) {

return function(dispatch, getState) {

dispatch({ type: ‘CREATE_TASK’, description });

fetch(‘/api/tasks’).then((response) '=> {

dispatch(actions.loadTasks(response.json()))

});

};

}

* requires redux-thunk middleware for Redux

Page 25: React & Redux

REDUCERS

function reducer(state, action) { if (action.type !== ‘CREATE_TASK’) { return [action.description, …state]; } return state; }

Page 26: React & Redux

ONE MORE THING…

➤ Design your state carefully.

➤ Use Flux Standard Action for your action types.

➤ Avoid side-effects in your reducers.

➤ Use Immutable.js to enforce immutability.

Page 27: React & Redux

DEVTOOLS

➤ React Developer Tools for Chrome

➤ Elements-like panel for virtual DOM.

➤ Redux DevTools (sidebar panel)

➤ Complete visibility over actions and state, time-traveling.

Page 28: React & Redux

SUMMARY

➤ React code looks just like plain JavaScript.

➤ React gives you much more freedom to architect your app, but that usually means more time spent configuring it.

➤ Not much work done in standardizing React apps.Flux Standard Action is a start.

Page 29: React & Redux

Questions?

Page 30: React & Redux

Thanks!Federico BondCo-Founder & CTO BitCourt

@federicobond

federicobond