viernes, 5 de mayo de 2023

🥱

Pasos para Aprender ReactJS

Aprender React y sus Hooks puede ser un desafío emocionante. Aquí tienes una guía con 20 pasos enfocados en aprender React Hooks. Para cada paso proporcionaré ejemplos de código básicos que te ayudarán a entender cómo usarlos.

  1. Entender JSX: JSX es una extensión de sintaxis para JavaScript recomendada por React para describir cómo debería verse la UI.
const element = <h1>Hello, world!</h1>;
  1. Crear una aplicación React: Utiliza create-react-app para configurar un nuevo proyecto.
npx create-react-app my-react-app
cd my-react-app
npm start
  1. Componentes Funcionales: Aprende a usar componentes funcionales, que son la base para los Hooks.
function App() {
  return <h1>Hello, React!</h1>;
}
  1. useState Hook: Gestiona el estado en un componente funcional con el Hook useState.
import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}
  1. useEffect Hook: Realiza efectos secundarios en componentes funcionales.
import React, { useState, useEffect } from 'react';

function Timer() {
  const [seconds, setSeconds] = useState(0);

  useEffect(() => {
    const interval = setInterval(() => {
      setSeconds(seconds => seconds + 1);
    }, 1000);
    return () => clearInterval(interval);
  }, []);

  return <div>Seconds: {seconds}</div>;
}
  1. Reglas de Hooks: Aprende las reglas de los Hooks (solo llámalos en el nivel superior y solo desde componentes de React o Hooks personalizados).

  2. Personalizar Hooks: Crea tus propios Hooks para reutilizar la lógica del estado y efectos entre componentes.

import React, { useState, useEffect } from 'react';

function useCounter() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    const id = setInterval(() => {
      setCount(c => c + 1);
    }, 1000);
    return () => clearInterval(id);
  }, []);

  return count;
}

function App() {
  const count = useCounter();
  return <h1>{count}</h1>;
}
  1. useContext Hook: Accede a datos en el contexto sin tener que pasar props a través de componentes intermedios.
import React, { useState, useContext } from 'react';

const CountContext = React.createContext();

function Counter() {
  const count = useContext(CountContext);
  return <div>{count}</div>;
}
  1. useReducer Hook: Gestiona estados más complejos con acciones y un reductor.
import React, { useReducer } from 'react';

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
}

function Counter() {
  const [state, dispatch] = useReducer(reducer, { count: 0 });
  
  return (
    <>
      Count: {state.count}
      <button onClick={() => dispatch({ type: 'increment' })}>+</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>-</button>
    </>
  );
}
  1. useCallback Hook: Optimiza el rendimiento memorizando callbacks.
import React, { useState, useCallback } from 'react';

function Button({ onClick, children }) {
  return <button onClick={onClick}>{children}</button>;
}

function App() {
  const [count, setCount] = useState(0);

  const increment = useCallback(() => {
    setCount(c => c + 1);
  }, []);

  return <Button onClick={increment}>Increment</Button>;
}
  1. useMemo Hook: Memoriza valores para evitar cálculos costosos en cada renderizado.
import React, { useState, useMemo } from 'react';

function ExpensiveComponent({ prop }) {
  const computedValue = useMemo(() => {
    // Imagina una función costosa aquí
    return complexFunction(prop);
  }, [prop]);

  return <div>{computedValue}</div>;
}
  1. useRef Hook: Accede y manipula elementos del DOM y guarda referencias de variables sin causar renderizados adicionales.
import React, { useRef } from 'react';

function TextInputWithFocusButton() {
  const inputEl = useRef(null);
  
  const onButtonClick = () => {
    inputEl.current.focus();
  };
  
  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Focus the input</button>
    </>
  );
}
  1. useLayoutEffect Hook: Similar a useEffect, pero se dispara sincrónicamente después de todas las mutaciones del DOM.

  2. Uso de Fragments: Encapsula una lista de hijos sin agregar nodos extras al DOM.

import React from 'react';

function List() {
  return (
    <>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
    </>
  );
}
  1. Manejo de Formularios: Gestiona los inputs de formulario con useState o useReducer.
import React, { useState } from 'react';

function Form() {
  const [name, setName] = useState('');
  
  const handleSubmit = (event) => {
    event.preventDefault();
    alert('A name was submitted: ' + name);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input type="text" value={name} onChange={(e) => setName(e.target.value)} />
      </label>
      <input type="submit" value="Submit" />
    </form>
  );
}
  1. Optimizando Rendimiento: Entiende cómo React maneja actualizaciones y cómo evitar renderizados innecesarios.

  2. React Router: Maneja el enrutamiento en tu aplicación con la librería React Router.

import React from 'react';
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';

function App() {
  return (
    <Router>
      <nav>
        <Link to="/">Home</Link>
        <Link to="/about">About</Link>
      </nav>
      <Switch>
        <Route path="/about">About Page</Route>
        <Route path="/">Home Page</Route>
      </Switch>
    </Router>
  );
}
  1. Testing de Hooks: Aprende a probar tus componentes con Hooks usando la librería React Testing Library.

  2. TypeScript con Hooks: Incrementa la robustez de tu código usando TypeScript en tus componentes React.

  3. Gestión de Estado Global: Explora el manejo del estado global de tu aplicación con Context y Hooks, o con la ayuda de librerías como Redux o MobX.

Estos pasos te ofrecen una base sólida para aprender React y sus Hooks. Recuerda que la práctica es fundamental para consolidar tus conocimientos. ¡Buena suerte en tu aprendizaje!