2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【React】そのProvider、実は要らないかも?

Posted at

結論:Providerは無くてもContextのdefaultValueなら参照できる

結論から言ってしまうと、Provider無くてもdefaultValueなら参照できます。
なのでReact Contextに定数を渡す場合、Providerは省略可能です。
その内容のツイートがこちら👇

https://twitter.com/DavidKPiano/status/1535976454353215489?s=20&t=0wP0skZFW1Jvr0__tWmP2g

試してみる

👇CodeSandbox

https://codesandbox.io/s/no-provider-react-context-obhtgu?file=/src/index.js

import { StrictMode, createContext, useContext } from "react";
import { createRoot } from "react-dom/client";

const rootElement = document.getElementById("root");
const root = createRoot(rootElement);

root.render(
  <StrictMode>
    <App />
  </StrictMode>
);

// 適当なContextにdefaultValueを渡す
const SomeContext = createContext("no provider")

function App() {
  // Providerが無くてもvalue === "no provider"
  const value = useContext(SomeContext)
  return <div>{value}</div>
}

このように createContext に渡したdefaultValueはProviderが無くてもアクセス可能です。

活用方法

一例としてAxios Instanceのように参照が変わらない性質の値で、環境によって異なるものを渡したい場合(依存注入が活きる場合)に効果を発揮すると思います。(そもそもProvider有り無し関係なく正しい使い方ですけど)

グローバル定数を何でもかんでもContextに包んで都度Consumeするのは、直接importするよりは結合度を下げられるメリットはあるものの、ちょっと考え物かなぁ。。。ぜひ皆さんのご意見、コメントお待ちしています。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?