Piero Divasto
Full-stack developer
M.Sc. in Business Informatics
Lead Consultant @ ThoughtWorks
Community Lead (v) @ Facebook Developers Circle: Santiago
Motivación
Que es React?
Virtual DOM
Component-based
Declarative vs Imperative
Componentes
Prop
State
Tipos de componentes
Component-lifecycle
Old & new
A JavaScript library for building user interfaces
Virtual DOM
Component-based
Declarativo
is a programming paradigm—a style of building the structure and elements of computer programs—that expresses the logic of a computation without describing its control flow.
Declarativo
const container = document.getElementById(‘container’);
const btn = document.createElement(‘button’);
btn.className = ‘btn red’;
btn.onclick = function(event) {
if (this.classList.contains(‘red’)) {
this.classList.remove(‘red’);
this.classList.add(‘blue’);
} else {
this.classList.remove(‘blue’);
this.classList.add(‘red’);
}
};
container.appendChild(btn);
class Button extends React.Component{
this.state = { color: 'red' };
handleChange = () => {
const color = this.state.color === 'red'
? 'blue'
: 'red';
this.setState({ color });
}
render() {
return (
<div>
<button
className=`btn ${this.state.color}`
onClick={this.handleChange}>
</button>
</div>
);
}
}
Imperativo
Declarativo
Componente
props
state
DOM
Props
Prop-types
Prop-types
array
bool
func
number
object
string
node
element
instanceOf(ClassName)
oneOf([‘News’, ‘Photos’])
oneOfType([PropTypes.type1, PropTypes.type2 ])
arrayOf(PropTypes.type)
objectOf(PropTypes.type)
shape({ prop1: PropTypes.type })
State
State
// El estado NO se actualiza directamente
// Lo siguiente esta malo
this.state.nombre = "Peter"
// El estado se actualiza utilizandola función setState
this.setState({ nombre: "Peter" });
// Ahora, React, por temas de performance, ejecuta multiples setState
// en modo batch mergeando los cambios de estado. Además, los cambios del
// state y props pueden ser asyncronos. Por lo tanto es mejor utilizar la
// otra forma de actualizar el state.
this.setState((state, props) => {
return {
counter: state.counter + props.increment
}
});
Stateless vs Stateful
Stateless vs Stateful
class HelloWorld extends React.Component {
constructor(props) { super(props); }
render() {
return <div>Hello {this.props.name}</div>
}
}
HelloWorld.propTypes = {
name: PropTypes.string.isRequired
};
HelloWorld.defaultProps = {
name: ''
};
ReactDOM.render(<HelloWorld name="World" />, mountNode);
Stateless vs Stateful
*** ahora es posible con hooks
Stateless vs Stateful
const HelloWorld = props => {
return (
<div>Hello {props.name}</div>
)
}
HelloWorld.propTypes = {
name: PropTypes.string.isRequired
};
HelloWorld.defaultProps = {
name: ''
};
ReactDOM.render(<HelloWorld name="World" />, mountNode);
Component-lifecycle
Inicialización
Actualización
Destrucción
Component-lifecycle - OLD
getInitialState()
getDefaultProps()
componentWillMount()
render()
componentDidMount()
componentWillReceiveProps()
shouldComponentUpdate()
componentWillUpdate()
render()
componentDidUpdate()
Inicialización
Actualización
Destrucción
Inicialización
Component-lifecycle - OLD
Update
Component-lifecycle - OLD
Destrucción
Component-lifecycle - OLD
Component-lifecycle - OLD
Mal uso de ciertos métodos
Conflicto con futuro async rendering
Component-lifecycle - NEW
componentWillMount
componentWillReceiveProps
componentWillUpdate
getSnapshotBeforeUpdate
Component-lifecycle - NEW
componentWillMount
componentWillReceiveProps
componentWillUpdate
UNSAFE_*
Component-lifecycle - NEW
https://twitter.com/dan_abramov/status/981712092611989509
Component-lifecycle - NEW
Handling events
const HelloWorld = props => {
return (
<div
onClick={(event) => {
console.log('Ejecutando evento al hacer click')
}}
>
Hello {props.name}
</div>
)
}
HelloWorld.propTypes = {
name: PropTypes.string.isRequired
};
HelloWorld.defaultProps = {
name: ''
};
ReactDOM.render(<HelloWorld name="World" />, mountNode);
Create React App
Create React App
Create React App
npx create-react-app my-app
http://github.com/morph3o
https://medium.com/@pierodivasto
https://www.linkedin.com/in/pierodivasto
By Piero Divasto
Primer nivel del curso de React. En este curso vamos a aprender a crear web-apps utilizando React. En este nivel báscio, vamos a aprender como funciona React, vamos a aprender conceptos como State, Props, etc.