Прекратить прямой доступ к контексту React

Я делал обзор кода для своего коллеги и натолкнулся на код, который сразу же вызвал у меня тревогу.

<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()
  }
}

Это также вызвало некоторые другие проблемы. Что, если бы нам понадобилось перенести эти функции в другой контекст в будущем? Нам нужно будет отслеживать каждый раз, когда к этой функции обращаются context.actions.functionIWantToMove, и изменять контекст, в котором функция вызывается, то есть мне пришлось бы предоставить этому компоненту полный доступ к ВТОРОМУ контексту. Все для того, чтобы он мог получить доступ к одному фрагменту данных или вызвать единственную функцию.

Я быстро набросился на мерзавца, чтобы посмотреть, кто мог реализовать такой безответственный паттерн, и, конечно же, это был я. Ясно, что это ужасный способ делать что-то. Нам нужно было лучшее решение.

Реагируйте на помощь!

Одна из вещей, в которой React действительно хорош, - это разделение задач. Никакая особенность не воплощает это больше, чем крючки. Я вернулся к той строке, которая изначально вызвала красные флажки, я расширил код, чтобы предоставить дополнительный контекст:

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>
)

Я просто хотел отметить, что представленные здесь фрагменты кода являются надуманными примерами, используемыми для того, чтобы подчеркнуть точку зрения, отредактированными, чтобы показать только соответствующие части. Я знаю, что они не пойдут как есть. Надеюсь, это все еще будет понятно.

Suggested posts

Как избежать разрушительных последствий инсульта: уроки семейного опыта.

Как избежать разрушительных последствий инсульта: уроки семейного опыта.

Введение Инсульт — это неотложная медицинская помощь, которая может случиться с кем угодно в любое время. Это происходит, когда приток крови к части мозга нарушается, что приводит к внезапной потере функции мозга.

Jest — мощный фреймворк для тестирования JavaScript

Jest — мощный фреймворк для тестирования JavaScript

Тестирование — неотъемлемая часть разработки программного обеспечения. Это гарантирует, что код надежен, функционирует должным образом и снижает вероятность ошибок.

Related posts

Финансирование удаления углерода в 24 финансовом году

Разбивка запросов на ассигнования Carbon180 по направлениям

Финансирование удаления углерода в 24 финансовом году

Элисон Ли, управляющий советник по связям с правительством Процесс ежегодных ассигнований федерального правительства занимает центральное место в наших усилиях по финансированию удаления двуокиси углерода (CDR). Каждый год Carbon180 направляет запросы в различные офисы Конгресса, чтобы помочь определить, куда пойдут доллары в следующем году.

Сбор OSINT для поиска угроз

Сбор OSINT для поиска угроз

Привет, киберлюбители! Добро пожаловать обратно в серию OSINT по поиску угроз. В первой статье я рассказал вам об OSINT и его важности для поиска угроз.

Ковбойская ложь

Как мегакорпорации продали американцам мохнатую ложь

Ковбойская ложь

Это ярко-золотое утро в холмистой местности на западе, когда первые лучи солнечного света освещают инеистую траву на равнинах. Стадо безмятежных ангусских коров, угольно-черных и массивных, вырисовывается на фоне восхода солнца, когда они идут по проторенной тропе к месту, которое они все хорошо знают; барная стойка.

Медленная эрозия: раскрытие того, как люди угасают в своей карьере

Медленная эрозия: раскрытие того, как люди угасают в своей карьере

В современном быстро меняющемся и конкурентном мире карьера играет важную роль в личностном росте, финансовой стабильности и общей удовлетворенности жизнью. Однако многие люди оказываются в безжалостном цикле застоя и неудовлетворенности, постепенно угасая в своей профессиональной жизни.