Contextでデータ管理(createContext, useContext)

Contextを利用するとpropsのバケツリレーをせずに、複数コンポーネント間でデータを利用できます。「styleのtheme情報管理」や「locale情報管理」などで活用されていることがあります。ここでは「Contextの作成方法」「Context値の取得方法」を確認します。

フォルダ構造

以下フォルダ構成で構築したReactアプリにて動作確認をしました。

src/
├── components
│   └── Sample.tsx  // 「Hooks API(useContext)」 でContext値を取得
├── App.tsx
├── contexts.ts     // 「createContext」 で2つのContextを作成
└── index.tsx       // 「Context.Provider」 で配下コンポーネントにContextを提供

Contextを作成
( React.createContext )

src/contexts.ts

createContext を利用して2つの Contextオブジェクト を作成しています。

import { createContext } from 'react';

type XxxContextValue = {
  x: string | null;
};
export const XxxContext = createContext<XxxContextValue>({} as XxxContextValue);

type YyyContextValue = {
  y: string | null;
};
export const YyyContext = createContext<YyyContextValue>({} as YyyContextValue);

Contextを配下コンポーネントに提供
( Context.Provider )

src/index.tsx

作成したContextをコンポーネントで利用できるようにするには、Providerコンポーネント を利用します。

Providerコンポーネント は、先ほど作成した Contextオブジェクト のプロパティに格納されています。

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

import App from 'App';
import { XxxContext, YyyContext } from 'contexts';

ReactDOM.render(
  <React.StrictMode>
    <XxxContext.Provider value={{ x: 'Hello' }}>
      <YyyContext.Provider value={{ y: 'World' }}>
        <App />
      </YyyContext.Provider>
    </XxxContext.Provider>
  </React.StrictMode>,
  document.getElementById('root'),
);

コンポーネントからContext値を読み取り
( useContext )

src/App.tsx

import React, { FC } from 'react';

import Sample from 'components/Sample';

const App: FC = () => {
  return (
    <div style={{ padding: '12px', width: '400px', backgroundColor: '#ccc' }}>
      <h1>App</h1>
      <Sample samplePropData="Data passed from parent." />
    </div>
  );
};

export default App;

src/components/Sample.tsx

Context値を読み取るには、Hooks APIの useContext を利用します。

useContext の引数に Contextオブジェクト を指定することでContext値を取得できます。

import React, { FC, useContext } from 'react';

import { XxxContext, YyyContext } from 'contexts';

type Props = {
  samplePropData?: string;
};

const Sample: FC<Props> = ({ samplePropData }) => {
  const xxxContextValue = useContext(XxxContext);
  const yyyContextValue = useContext(YyyContext);

  return (
    <div style={{ padding: '12px', backgroundColor: '#eee' }}>
      <h1>Sample Component</h1>
      <p>samplePropData: {samplePropData}</p>

      <h2>xxxContext</h2>
      <p>xxxContextValue.x: {xxxContextValue.x}</p>

      <h2>yyyContext</h2>
      <p>yyyContextValue.y: {yyyContextValue.y}</p>
    </div>
  );
};

export default Sample;

動作確認

758-react-context_00.png

useContextでコンテキスト値を読み取れていることを確認できました。

参考

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。