Learning React
Main Concepts
React es una libreria JavaScript
Conceptos basicos del Javascript Modeno
Se definen las variables
let
yconst
en vez devar
.- Porque? Realmente todo es por el scope. JS tiene un block scope.
- Se pueden declarar variables dentro del block (if statement, for loops y eso) sin tener que preocuaparse por sobreescribir alguna variable declarada previamente.
Se puede usar la palabra reservada
class
.- A diferencia de los objetos, uno no necesita poner comas entre la definicion de metodos en una clase, como antes con los prototype.
- En las clases, la palabra clave
this
, en un metodo, puede ser diferente dependiendo de como es llamado.
Las arrow functions representados por
=>
, son regularmente funciones, pero de una forma mas corta. Por ejemplox => x * 2
es el equivalente defunction(x) { return x * 2; }
.- Las arrow function no tiene su propio valor
this
.
- Las arrow function no tiene su propio valor
las variables puedan cambiar (mutables) o no (inmutables). En JavaScript, los array y los objetos son mutables. Para evitar este comportamiento usar el spread operator.
// En un Array const stringList = ["Mohan", "Fasale", "Robert"]; const name = "Priya"; const result = [...stringList, name]; console.log(stringList); // ["Mohan","Fasale","Robert"] console.log(result); // ["Mohan","Fasale","Robert","Priya"] // En un objeto const user = { name: "Mohan", email: "sample@sss.com", isEmployee: false, }; const updatedUser = { ...user, isEmployee: true, }; console.log(user); // {name: "Mohan", email: "sample@sss.com", isEmployee: false} console.log(updatedUser); // {name: "Mohan", email: "sample@sss.com", isEmployee: true}
Closure
Una clausura o closure es una función que guarda referencias del estado adyacente (ámbito léxico o lexical enviroment). En otras palabras, una clausura permite acceder al ámbito de una función exterior desde una función interior.
Lexical scoping
function iniciar() {
var nombre = "Mozilla"; // La variable nombre es una variable local creada por iniciar.
function mostrarNombre() {
// La función mostrarNombre es una función interna, una clausura.
alert(nombre); // Usa una variable declarada en la función externa.
}
mostrarNombre();
}
iniciar();
- la funcion
iniciar()
crea una variable local llamadanombre
y una funcion interna llamadamostrarNombre()
. Por ser una funcion interna, esta última solo está disponible dentro del cuerpo deiniciar()
. - Tambien podemos notar que que la funcion
mostrarNombre()
no tiene ninguna variable propia; pero dado que las funciones internas tienen acceso a las funciones externas,mostrarNombre()
puede acceder a la variablenombre
declarada en la funcioniniciar()
. - Al ejecutar la funcion
iniciar()
, esta mostrara la variablenombre
en unalert()
la cual ha sido declarada en la funcion padre.
Closure
Basic Commands
npm init -y
npm install react react-dom next
In package.json
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start",
"test": "echo \"Error: no test specified\" && exit 1"
},
Before Hooks
https://reactjs.org/docs/hello-world.html
Render Props
https://reactjs.org/docs/render-props.html
Higher Order Components (HOCs)
https://reactjs.org/docs/higher-order-components.html
After Hooks
Allows for attaching reusable logic to an existing component
Use state and lifecycle methods inside a react functional component
Build 100% of your application with React Functional Components
Three commonly Used React Hooks
useState
Basic state function
import React, { useState } from "react";
const InputElement = () => {
const [inputText, setInputText] = useState("");
/* const results = useState("");
const inputText = results[0];
const setInputText = results[1]; */
return (
<div>
<input
onChange={(e) => {
setInputText(e.target.value);
}}
placeholder="Enter Some Text"
/>
{inputText}
</div>
);
};
export default InputElement;
useRef
Primarily used to allow access directly to an element in the DOM
import React, { useRef } from "react";
const ImageToggleOnMouseOver = ({ primaryImg, secondaryImg }) => {
const imageRef = useRef(null);
return (
<img
onMouseOver={() => {
imageRef.current.src = secondaryImg;
}}
onMouseOut={() => {
imageRef.current.src = primaryImg;
}}
src={primaryImg}
alt=""
ref={imageRef}
/>
);
};
export default ImageToggleOnMouseOver;
useEffect
Using this hook, you tell React that the component needs to do something after render. This function always will be called after performing the DOM updates.
The useEffect
is the equivalent of the lifecycle method componentDidMOunt
, componentDidUpdate
and componentWillUnmount
in a single function.
the useEffect
can be used for data fetching, setting up a subscription, and manually changing the DOM in react components.
import React, { useState, useEffect } from "react";
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>Click me</button>
</div>
);
}