quick start with react | dreamlab academy #2

49
Intro to React Marcin Śpiewak Marek Mitis

Upload: dreamlab

Post on 11-Apr-2017

74 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Quick start with React | DreamLab Academy #2

Intro to React

Marcin ŚpiewakMarek Mitis

Page 2: Quick start with React | DreamLab Academy #2

First app

import React from 'react';

import ReactDOM from 'react-dom';

ReactDOM.render(

<div>Hello</div>,

document.getElementById('root')

);

Page 3: Quick start with React | DreamLab Academy #2

First app

import React from 'react';

import ReactDOM from 'react-dom';

ReactDOM.render(

<div>Hello</div>,

document.getElementById('root')

);

Node managed by React DOM

Page 4: Quick start with React | DreamLab Academy #2

First app

import React from 'react';

import ReactDOM from 'react-dom';

ReactDOM.render(

<div>Hello</div>,

document.getElementById('root')

);

Main component

Page 5: Quick start with React | DreamLab Academy #2

controllers

Services

templates

models

Page 6: Quick start with React | DreamLab Academy #2

Controllers

Services

templates

models

COMPONENTS

Page 7: Quick start with React | DreamLab Academy #2
Page 8: Quick start with React | DreamLab Academy #2
Page 9: Quick start with React | DreamLab Academy #2
Page 10: Quick start with React | DreamLab Academy #2

REACT === COMPONENTS

Page 11: Quick start with React | DreamLab Academy #2

First app

import React from 'react';

import ReactDOM from 'react-dom';

ReactDOM.render(

<div>Hello</div>,

document.getElementById('root')

);

Page 12: Quick start with React | DreamLab Academy #2

First app

import React from 'react';

import ReactDOM from 'react-dom';

ReactDOM.render(

<div>Hello</div>,

document.getElementById('root')

);

“ReactDOM is the glue between React and the DOM”

Page 13: Quick start with React | DreamLab Academy #2

Example component

import React from 'react';

export function TodoApp() {

return (

<h1>Learn React</h1>

);

}

export default TodoApp;

Page 14: Quick start with React | DreamLab Academy #2

Example component

import React from 'react';

export function TodoApp() {

return (

<h1>Learn React</h1>

);

}

export default TodoApp;

function

Page 15: Quick start with React | DreamLab Academy #2

Example component

import React from 'react';

export function TodoApp() {

return (

<h1>Learn React</h1>

);

}

export default TodoApp;

import React from 'react';

export class TodoApp extends React.Component {

render() {

return (

<h1>Learn React</h1>

);

}

}

export default TodoApp;

function

Page 16: Quick start with React | DreamLab Academy #2

Example component

import React from 'react';

export function TodoApp() {

return (

<h1>Learn React</h1>

);

}

export default TodoApp;

import React from 'react';

export class TodoApp extends React.Component {

render() {

return (

<h1>Learn React</h1>

);

}

}

export default TodoApp;

classfunction

Page 17: Quick start with React | DreamLab Academy #2

Example component

import React from 'react';

export function TodoApp() {

return (

<h1>Learn React</h1>

);

}

export default TodoApp;

import React from 'react';

export class TodoApp extends React.Component {

render() {

return (

<h1>Learn React</h1>

);

}

}

export default TodoApp;

classfunction ===

Page 18: Quick start with React | DreamLab Academy #2

export function TodoApp() {

return (

<h1>Learn React</h1>

);

}

XML???

Page 19: Quick start with React | DreamLab Academy #2

JSX

Page 20: Quick start with React | DreamLab Academy #2

Compilation

function TodoApp() {

return (

<h1>Learn React</h1>

);

}

function TodoApp() {

return React.createElement(

"h1",

null,

"Learn React"

);

}

compilation

Page 21: Quick start with React | DreamLab Academy #2

Compilation

function TodoApp() {

return (

<h1>Learn React</h1>

);

}

function TodoApp() {

return React.createElement(

"h1",

null,

"Learn React"

);

}

compilation

Page 22: Quick start with React | DreamLab Academy #2

Props

function TodoApp({task}) {

return (

<h1>{task}</h1>

);

}

Page 23: Quick start with React | DreamLab Academy #2

Props

function TodoApp({task}) {

return (

<h1>{task}</h1>

);

}

<TodoApp task={"Learn React"}/>

Page 24: Quick start with React | DreamLab Academy #2

class TodoApp extends React.Component {

render() {

return (

<h1>{this.props.task}</h1>

);

}

}

<TodoApp task={"Learn React"}/>

Page 25: Quick start with React | DreamLab Academy #2

Props are immutable

class TodoApp extends React.Component {

render() {

this.props.task = 'New task';

return (

<h1>{this.props.task}</h1>

);

}

}

Page 26: Quick start with React | DreamLab Academy #2

Props are immutable

class TodoApp extends React.Component {

render() {

this.props.task = 'New task';

return (

<h1>{this.props.task}</h1>

);

}

}

Page 27: Quick start with React | DreamLab Academy #2

Props are immutable

class TodoApp extends React.Component {

render() {

this.props.task = 'New task';

return (

<h1>{this.props.task}</h1>

);

}

}

Page 28: Quick start with React | DreamLab Academy #2

Stateclass TodoApp extends React.Component {

constructor(props) {

super(props);

this.state = {

task: 'Learn React'

}

}

render() {

return (

<h1>{this.state.task}</h1>

);

}

}

Page 29: Quick start with React | DreamLab Academy #2

Stateclass TodoApp extends React.Component {

constructor(props) {

super(props);

this.state = {

task: 'Learn React'

}

}

render() {

return (

<h1>{this.state.task}</h1>

);

}

}

Page 30: Quick start with React | DreamLab Academy #2

State is mutable

addNewTask() {

this.setState({

task: 'My new task'

});

}

Page 31: Quick start with React | DreamLab Academy #2

State is mutable

addNewTask() {

this.setState({

task: 'My new task'

});

}

Page 32: Quick start with React | DreamLab Academy #2

EventsaddTask(e) {

...

}

render() {

return (

<form onSubmit={this.addTask}>

...

</form>

);

}

Page 33: Quick start with React | DreamLab Academy #2

EventsaddTask(e) {

...

}

render() {

return (

<form onSubmit={this.addTask}>

...

</form>

);

}

Page 34: Quick start with React | DreamLab Academy #2

EventsaddTask(e) {

e.preventDefault();

...

}

render() {

return (

<form onSubmit={this.addTask}>

...

</form>

);

}

Page 35: Quick start with React | DreamLab Academy #2

EventsaddTask(e) {

e.preventDefault();

...

}

render() {

return (

<form onSubmit={this.addTask}>

...

</form>

);

}

stops the default action of an element

Page 36: Quick start with React | DreamLab Academy #2

Child componentimport TodoList from './TodoList';

export class TodoApp extends React.Component {

render() {

return (

<div>

...

<TodoList items={this.state.items} />

</div>

);

}}

Page 37: Quick start with React | DreamLab Academy #2

Child componentimport TodoList from './TodoList';

export class TodoApp extends React.Component {

render() {

return (

<div>

...

<TodoList items={this.state.items} />

</div>

);

}}

Page 38: Quick start with React | DreamLab Academy #2

Render multiple componentsrender() {

return (

<ul>

{this.props.items.map((item) => {

return (

<li key={item.id}>{item.text}</li>

)

})}

</ul>

)

}

Page 39: Quick start with React | DreamLab Academy #2

Render multiple componentsrender() {

return (

<ul>

{this.props.items.map((item) => {

return (

<li key={item.id}>{item.text}</li>

)

})}

</ul>

)

}

This way React can handle the minimal DOM change.

Page 40: Quick start with React | DreamLab Academy #2

The component lifecycleconstructor()

componentWillMount()

render()

componentDidMount()

componentWillReceiveProps()

shouldComponentUpdate()

componentWillUpdate()

render()

componentDidUpdate()

componentWillUnmount()

Page 41: Quick start with React | DreamLab Academy #2

The component lifecycleconstructor()

componentWillMount()

render()

componentDidMount()

componentWillReceiveProps()

shouldComponentUpdate()

componentWillUpdate()

render()

componentDidUpdate()

componentWillUnmount()

mounting

updating

unmounting

Page 42: Quick start with React | DreamLab Academy #2

Render methodconstructor()

componentWillMount()

render()

componentDidMount()

componentWillReceiveProps()

shouldComponentUpdate()

componentWillUpdate()

render()

componentDidUpdate()

componentWillUnmount()

Page 43: Quick start with React | DreamLab Academy #2

Render methodconstructor()

componentWillMount()

render()

componentDidMount()

componentWillReceiveProps()

shouldComponentUpdate()

componentWillUpdate()

render()

componentDidUpdate()

componentWillUnmount()

Page 44: Quick start with React | DreamLab Academy #2

Render methodconstructor()

componentWillMount()

render()

componentDidMount()

componentWillReceiveProps()

shouldComponentUpdate()

componentWillUpdate()

render()

componentDidUpdate()

componentWillUnmount()

Invoke only if shouldComponentUpdate return true

Page 45: Quick start with React | DreamLab Academy #2

Typechecking with PropTypesimport React, {PropTypes} from 'react';

export class TodoList extends React.Component {

...

}

TodoList.propTypes = {

items: PropTypes.string.isRequired

};

Page 46: Quick start with React | DreamLab Academy #2

Typechecking with PropTypesimport React, {PropTypes} from 'react';

export class TodoList extends React.Component {

...

}

TodoList.propTypes = {

items: PropTypes.string.isRequired

};

Page 47: Quick start with React | DreamLab Academy #2

Typechecking with PropTypesimport React, {PropTypes} from 'react';

export class TodoList extends React.Component {

...

}

TodoList.propTypes = {

items: PropTypes.string.isRequired

};

Page 48: Quick start with React | DreamLab Academy #2

Thanks[Dzięki]

Page 49: Quick start with React | DreamLab Academy #2

Thanks[Dzięki]