Agile育成ブログ
未来を変える喜びを
React

Context API


Warning: count(): Parameter must be an array or an object that implements Countable in /home/xs638785/agile-software.site/public_html/wp-content/plugins/rich-table-of-content/functions.php on line 490

Reactが基本的に持ってるメインストリージもあります。それがcontextです。
そしてこのcontextを生成してくれるAPIがContext API

contextの生成

createContextというメソッドを使って生成できます。

import { createContext } from 'react';
export const LanguageContext = createContext("kr");

このようにcreateContextで生成したcontextオブジェクトにはProviderConsumerという特別なReactコンポーネントが入ってます。

Provider

Providervalue propsを用いて子コンポーネントたちにstateを渡す役割です。Providerの中にあるすべての子コンポーネントはそのcontext内のデータにアクセスできます。

import React from 'react';
import LanguageContext from './LanguageContext'; //上で作ったcontext
import MainContent from './MainContent'; //コンポーネント
import Header from './Header'; //コンポーネント

export const App = () => {
  return (
    <LanguageContext.Provider value="kr">
      <div className="App">
        <Header />
        <MainContent />
      </div>
    </LanguageContext.Provider>
  );
}

これでHeaderMainContentcontextにアクセスできるようになりました。基本的にはConsumerでアクセスできます。

Consumer

ConsumerProviderから渡されたstateをもらって使う役割です。
MainContentコンポーネントのコードで表すと

import React from 'react';
import LanguageContext from './LanguageContext';

export const MainContent = () => {
  return (
    <LanguageContext.Consumer>
      {(language) => (
        <section language={language}>
	//何らかの内容
	</section>
      )}
    </LanguageContext.Consumer>
  );
};

Consumer内の関数でstateを使うことができます。Providervalueでkrを渡してましたから、このlanguageはkrになってるはずです。

useContext

useContextがやってることはConsumerと同じですが、Consumerで囲まなくても渡されたstateをもらって使わせてくれるhookです。

https://www.agile-software.site/2021/07/10/react-hooks/

You cannot copy content of this page