Deja de acceder directamente al contexto de React

Estaba haciendo una revisión de código para un colega mío y encontré un código que inmediatamente envió una bandera roja en mi mente.

<Checkbox label={translationContext.getTranslation(checkboxLabel)}/>

... inside functional component
const getNextSection = () => {
  valid = context.actions.validateCurrentSection()
  
  if(!valid){
    return context.actions.showErrors()
  } else {
    return context.actions.getNextSection()
  }
}

Esto también introdujo algunos otros problemas. ¿Qué pasaría si necesitáramos mover estas funciones a un contexto diferente en el futuro? Tendríamos que rastrear cada vez que se accede a esa función a través context.actions.functionIWantToMovede , y cambiar el contexto al que se llama la función, lo que significa que tendría que darle a ese componente acceso completo a un SEGUNDO contexto. Todo para que pudiera acceder a una pieza de datos o llamar a una sola función.

Hice un rápido git culp para ver quién podría haber implementado un patrón tan irresponsable y, por supuesto, fui yo. Claramente, esta es una manera horrible de hacer las cosas. Necesitábamos una mejor solución.

¡Reacciona ganchos al rescate!

Una de las cosas en las que React es realmente bueno es la separación de preocupaciones. Ninguna característica encarna esto más que los ganchos. Volví a esa línea que originalmente causó las banderas rojas, amplié el código para proporcionar más contexto:

import React, {useContext} from "react"
import {TranslationContext} from "../contexts/translation-context.tsx"
const CheckboxGroup = ({options}) => (
  translationContext = useContext(TranslationContext)
  <div>
    {options.map(option => (
      <Checkbox label={translationContext.getTranslation(option.text) />
      ))
    }
  </div>
)

import React from "react"
import {useTranslate} from "../translate"
const TranslatedCheckbox = ({label}) => {
  const translatedValue = useTranslate(label)
  
  return <Checkbox label={translatedValue} />
}

const CheckboxGroup = ({options}) => (
  <div>
    {options.map(
      option => <TranslatedCheckbox label={option.label}/>
     )
    }
  </div>
)

Solo quería señalar que los fragmentos de código que se muestran aquí son ejemplos artificiales que se usan para demostrar un punto, editados para mostrar solo las partes relevantes. Soy consciente de que no funcionarán como están. Esperemos que el punto todavía se entienda.

Suggested posts

Evitar las consecuencias devastadoras de un derrame cerebral: aprender del viaje de una familia.

Evitar las consecuencias devastadoras de un derrame cerebral: aprender del viaje de una familia.

Introducción Un accidente cerebrovascular es una emergencia médica que puede afectar a cualquier persona en cualquier momento. Ocurre cuando se interrumpe el flujo de sangre a una parte del cerebro, lo que lleva a una pérdida repentina de la función cerebral.

Jest: un poderoso marco de prueba de JavaScript

Jest: un poderoso marco de prueba de JavaScript

Las pruebas son una parte esencial del desarrollo de software. Garantiza que el código sea confiable, funcione como se espera y reduce la probabilidad de errores.

Related posts

Ese Archivo de Amenazas: Vol 7 Black Basta

Ese Archivo de Amenazas: Vol 7 Black Basta

En el mundo interconectado de hoy, la amenaza de los ataques cibernéticos es más frecuente que nunca. Los ciberdelincuentes y los actores del estado-nación buscan constantemente explotar las vulnerabilidades y robar datos valiosos, lo que representa un riesgo significativo para las organizaciones de todos los tamaños.

¿Qué hace que un podcast sea influyente?

¿Qué hace que un podcast sea influyente?

La semana pasada noté un comunicado de prensa, enviado a través de PressGazette (un sitio web de noticias de los medios británicos). El artículo anunciaba que Acast, la empresa de publicidad y alojamiento de podcasts de Scandi, lideraría un consorcio de editores "probablemente los más influyentes" en podcasting.

El desafío de lectura de Goodreads es tóxico

El desafío de lectura de Goodreads es tóxico

La picazón en mi mano se extendió mientras negociaba con el librero local por otro libro. Este libro, como el resto que compré recientemente, encontraría su trono en mi pila de 'To Be Read' (TBR); y sin embargo, lo compré.

los pronombres dan mucho miedo

Me llama la atención De repente, como ocurre con tanta frecuencia Es el punto medio de nuevo <No, no el del Pacífico, tú, el del carnaval> Todos los titulares en voz alta...