react-puro-19
  • React Puro - 19
  • code
    • README
    • README
    • README
    • README
    • README
    • README
    • README
    • README
  • 7-state-en-clases
    • Ejemplo inicial: un contador
    • Manejo de eventos
    • El state
    • Sintaxis limpia en Class Components
    • setState es Asincrónico
    • Fusión superficial vs profunda
  • 5-children
    • Personalizar Children antes de renderizar
    • PropTypes para Children
    • Los Children
    • Diferentes tipos de Children
    • Manejando uso Children
  • 13-hook-usereducer
    • Qué es un Reducer?
    • Un ejemplo más practico
    • Entonces, Redux murió?
  • 4-proptypes
    • Documentación y depuración incluida
    • PropTypes como documentación
    • Cómo validar, formas comunes
    • Ejemplo Tweet con PropTypes
  • 3-props
    • Comunicación con componentes Padre
    • Las Props:
    • Pasar Props
    • Recibir Props
    • Ejemplo Tweet con Props
  • 11-pensando-uso-state
    • "Tipos" de componentes
    • Qué colocar en el State
    • Dónde mantener el estado
    • Pensando declarativamente
  • 9-requests-api
    • Intro
    • Eligir libreria HTTP
    • Obtener datos y mostrarlos
  • 10-state-en-funciones
    • El useState Hook
    • Actualizar State basado en State anterior
    • State como un Array
    • Reglas de los Hooks
    • La "magia" de los Hooks
    • State como un Objeto
    • Intro Hooks
  • 15-api-context
    • Usando React API Context
    • Patrón "Slots"
    • Patrón "Render Props"
    • Intro API Context
    • Otros Patrones de Context
    • Ejemplo perforación de props
    • hook_usecontext
  • 8-ciclo-vida-componente
    • Fases
    • El ciclo
    • Manejo de errores
    • Desmontaje
    • Representación
    • Montaje
  • 14-hook-useeffect
    • Límite cuando se ejecuta un Effect
    • Hacer cambios visibles del DOM
    • Obtener datos (Fetch) con useEffect
    • Intro useEffect
    • Re-obtener datos (Re-Fetch) cuando cambian
    • Solo ejecución en montaje y desmontaje
  • 2-jsx
    • Ejemplo componente Tweet:
    • JSX:
    • Trabajando con JSX:
  • 12-controles-entrada
    • Entradas controladas
    • Entradas no controladas
  • 6-github-file-list
    • Parte 2: la Prop 'key'
    • Parte inicial
  • 1-hola_mundo
    • Hola mundo:
Con tecnología de GitBook
En esta página
  • Recordar siempre inicializar el state
  • Trivialidades de Reddit

¿Te fue útil?

  1. 9-requests-api

Obtener datos y mostrarlos

Se deja un componente de ejemplo simple que obtiene publicaciones de Reddit. Crear un nuevo proyecto de la misma manera que se ha hecho antes y escribir el código. Luego revisar que está sucediendo.

import React from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';

class Reddit extends React.Component {
    state={
        posts: []
    };

    componentDidMount() {
        axios
            .get(
                `https://www.reddit.com/r/${
                this.props.subreddit
                }.json`
            )
            .then(res => {
                const posts=res.data.data.children.map(
                    obj => obj.data
                );
                this.setState({ posts });
            });
    }

    render() {
        const { posts }=this.state;
        return (
            <div>
                <h1> {`/r/${this.props.subreddit}`} </h1>
                <ul>
                    {posts.map(post => (
                        <li key={post.id} > {post.title} </li>
                    ))}
                </ul>
            </div>
        );
    }
}

ReactDOM.render(
    <Reddit subreddit="reactjs" />,
    document.querySelector('#root')
);

Primero, se inicializa el estado en la parte superior. Esto es importante porque el componente se procesará al menos una vez antes de que la llamada regrese de Reddit, y si se deja el arreglo de publicaciones sin inicializar, la llamada a this.state.posts.map(...) fallará durante la primera representación.

Recordar siempre inicializar el state

En componentDidMount del ciclo de vida es donde ocurre la magia. Este método se ejecutará después de que el componente se monte por primera vez. Este método solo se ejecuta una vez durante la vida útil del componente.

Se utiliza la función axios.get para obtener los datos del subreddit, en función de la prop subreddit pasada durante el renderizado en la parte inferior (ReactDOM.render).

Como axios devuelve una promesa, se encadena la llamada con .then para manejar la respuesta. Los post se extraen después de un poco de transformación, y luego lo importante:

El state del componente se actualiza llamando a this.setState con el nuevo arreglo de post. Esto desencadena una nueva representación y, a continuación, los post son visibles.

Trivialidades de Reddit

Un par de cosas a tener en cuenta, específicas de Reddit:

• Se puede agregar .json al final de cualquier URL de subreddit y obtener una representación JSON de las publicaciones allí.

• Si se olvida el www, la solicitud probablemente fallará con un error CORS.

• Los datos que devuelve son complejos con muchos campos anidados, por lo que se necesita este fragmento de código para extraer las publicaciones: res.data.data.children.map (obj => obj.data); con axios, y con fetch sea probable omitir un .data

AnteriorEligir libreria HTTPSiguiente10-state-en-funciones

Última actualización hace 5 años

¿Te fue útil?

subreddit