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、関数が呼び出されているコンテキストを変更する必要があります。つまり、そのコンポーネントに2番目のコンテキストへのフルアクセスを許可する必要があります。そのため、1つのデータにアクセスしたり、1つの関数を呼び出したりすることができます。

誰がそのような無責任なパターンを実装できたのかを確認するために、私は簡単なgitの非難をしました。もちろん、それは私でした。明らかに、これは物事を行うための恐ろしい方法です。より良い解決策が必要でした。

フックを反応させて救助しましょう!

Reactが本当に得意なことの1つは、関心の分離です。フック以上にこれを具体化する機能はありません。最初に危険信号を引き起こしたその行に戻り、コードを拡張してさらにコンテキストを提供しました。

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

ここで紹介するコードスニペットは、要点を説明するために使用される不自然な例であり、関連する部分のみを表示するように編集されていることに注意してください。そのままでは動作しないことは承知しております。うまくいけば、ポイントはまだ伝わっています。

提案された投稿

脳卒中の壊滅的な結果を避ける: 家族の旅から学ぶ 。

脳卒中の壊滅的な結果を避ける: 家族の旅から学ぶ 。

はじめに 脳卒中は、いつでも誰でも起こり得る医療上の緊急事態です。これは、脳の一部への血流が中断され、脳機能が突然失われることで発生します。

Jest — 強力な JavaScript テスト フレームワーク

Jest — 強力な JavaScript テスト フレームワーク

テストはソフトウェア開発において不可欠な部分です。これにより、コードの信頼性が保証され、期待どおりに機能し、エラーの可能性が軽減されます。

関連記事

赤髪の少女単独公演

ヘイデンからの依頼で、ケイティは自分のオナニーを撮影する。

赤髪の少女単独公演

一緒に過ごした夜を終え、ヘイデンがケイティを大学の寮に車で送ったのは真夜中過ぎだった。彼女は朝早くから授業があり、前夜彼と一緒にいた後、着替えを持っていませんでした。

ネットワークテレビツイッター

ネットワークテレビツイッター

古いものは再び新しくなり、以前はキラキラ輝いていたものがくすんで見えます。私は、JNCO ジーンズが 1990 年代後半の他のファッションとともにダウンタウンのクールな子供たちの間で復活したことについて話しているのではありません。

職場革命: 一流の専門家がハイブリッド ワークとリモート ワークについて語る

職場革命: 一流の専門家がハイブリッド ワークとリモート ワークについて語る

今日の急速に進化するビジネス環境において、ハイブリッドおよびリモートワークの概念は前例のない勢いを増しています。企業が従業員のニーズや期待の変化に適応し続ける中、さまざまな分野の専門家が集まり、この変革的な働き方のメリット、課題、将来について議論しています。

デザインに 2 年 - 良い点、悪い点、そして醜い点…

デザインに 2 年 - 良い点、悪い点、そして醜い点…

「Hey Siri、オリビア・ディーンの『ミー・ダイブ』をかけて」私がナイジェリアのアクレにあるフューチャー アカデミー アフリカでインターンシップを始めたのは、2021 年 5 月のことでした。