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

¿Te fue útil?

  1. 15-api-context

Patrón "Slots"

Si se puede encontrar una manera de fusionar la estructura de la aplicación y aprovechar la prop de hijos (children), puede conducirse a un código más limpio sin tener que recurrir a la perforación profunda, Context o cualquier otra cosa.

La prop children es una buena solución para componentes que necesitan ser marcadores de posición genéricos, como Nav, Sidebar y Body en el ejemplo anterior. También se pueden pasar elementos JSX a cualquier props, no solo a "children", por lo que si se necesita más de un "slot" para conectar componentes, tenerlo en cuenta.

Aquí el mismo ejemplo basado en el anterior, reescrito para que Nav y Sidebar acepten prop children y lo representen como están. También el componente Body no toma la prop "children", pero tiene dos "slots" que muestra en la página. Escrito de esta manera, el componente App de nivel superior simplemente puede representar lo que necesita, utilizando los datos que ya tiene dentro del alcance, sin tener que pasar datos a más de un nivel.

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';

const UserAvatar = ({ user, size }) => (
    <img
    className={`user-avatar ${size || ''}`}
    alt="user avatar"
    src={user.avatar}
    />
);

const UserStats = ({ user }) => (
    <div className="user-stats" >
        <div>
            <UserAvatar user={user} />
            {user.name}
        </div>
        <div className="stats" >
            <div> {user.followers} Followers </div>
            <div> Following {user.following} </div>
        </div>
    </div>
);

// Aceptar children y renderizarlos
const Nav = ({ children }) => (
    <div className="nav" > {children} </div>
);

const Content = () => (
    <div className="content" > main content here </div>
);

// Aceptar children y renderizarlos
const Sidebar = ({ children }) => (
    <div className="sidebar" > {children} </div>
);

// Body necesita una barra lateral y contenido, pero 
// escrito de esta manera, pueden ser CUALQUIER COSA
const Body = ({ sidebar, content }) => (
    <div className="body" >
        <Sidebar> {sidebar} </Sidebar>
        {content}
    </div>
);

class App extends React.Component {
    state = {
        user: {
            avatar: 'https://www.gravatar.com/avatar/763dcd4dad38689d57aa9d83a60bfaa5',
            name: 'Zero',
            followers: 1234,
            following: 123
        }
    };

    render() {
        const { user } = this.state;

        return (
            <div className="app" >
                <Nav>
                    <UserAvatar user={user} size="small" />
                </Nav>
                <Body
                    sidebar={ <UserStats user={user} /> }
                    content={ <Content /> }
                />
            </div>
        );
    }
}

ReactDOM.render(
    <App />,
    document.querySelector('#root')
);

Sin embargo, si la aplicación es más compleja, podría ser difícil descubrir cómo adaptar el patrón de los children y slots de esta manera.

En sección siguiente se verá cómo se puede reemplazar la perforación de props y el patrón de esta sección con la API Context.

AnteriorUsando React API ContextSiguientePatrón "Render Props"

Última actualización hace 5 años

¿Te fue útil?