React.createContextのポイントはdefaultValue?
2023-12-30 03:10:45
質問
について React 16 Context doc ページ を見ると、これに似た例があります。
const defaultValue = 'light';
const SomeContext = React.createContext(defaultValue);
const startingValue = 'light';
const App = () => (
<SomeContext.Provider theme={startingValue}>
Content
</SomeContext.Provider>
)
defaultValueの意味がないように思えるのは、代わりに
startingValue
を他の何かに設定したり、設定しなかったりすると(これは
undefined
を設定しない場合)、それを上書きしてしまいます。それはいいんです、そうすべきなんです。
しかし、それなら何のために
defaultValue
?
もし、変化しない静的なコンテキストを持ちたいのであれば、以下のようにして、Providerが単に
defaultValue
const App = () => (
<SomeContext.Provider>
Content
</SomeContext.Provider>
)
どのように解決するのですか?
Providerがない場合、関数createContextにはdefaultValueの引数が使用されます。これは、コンポーネントをラップせずに単体でテストしたり、Providerと異なる値でテストするのに便利です。
コードサンプルです。
import { createContext, useContext } from "react";
const Context = createContext( "Default Value" );
function Child() {
const context = useContext(Context);
return <h2>Child1: {context}</h2>;
}
function Child2() {
const context = useContext(Context);
return <h2>Child2: {context}</h2>;
}
function App() {
return (
<>
<Context.Provider value={ "Initial Value" }>
<Child /> {/* Child inside Provider will get "Initial Value" */}
</Context.Provider>
<Child2 /> {/* Child outside Provider will get "Default Value" */}
</>
);
}
関連
-
[解決済み】HTMLファイルのソースを見るだけでなく、GitHubから直接実行することはできますか?
-
[解決済み】「SyntaxError: 予期しないトークン < in JSON at position 0".
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] JavaScript で範囲を作成する - 奇妙な構文
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
-
[解決済み] React-RouterにGoogle Analyticsを設定するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSのDateからDay名
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] JavaScriptのtoString()関数をオーバーライドして、デバッグ用に意味のある出力を提供することは可能でしょうか?
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] これは純関数ですか?
-
[解決済み] 変異を伴わないオブジェクトからの値の削除
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法