質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

useStateをコンポーネント外で使用する方法が知りたいです

ARIA-0
ARIA-0

総合スコア11

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

2回答

0グッド

1クリップ

241閲覧

投稿2023/02/01 01:09

実現したいこと

React学習中で、アプリを作成しております。
ルーティングを設定しているindex.jsxというファイル上で、useStateを使用したいです。

前提

すべてのページのルーティングを設定しているファイルであるindex.jsxでuseStateを作成し、useContextで別コンポーネントへ渡すことで、別コンポーネントからでもuseContextの更新を行いたいと思っております。

発生している問題

ソースコードにあるようにuseStateを記述したいと考えていたのですが、コンポーネント内ではないためかレンダリングができず画面が真っ白になってしまいます。
このような部分では、どのように記述すればuseStateが使えるのでしょうか?
JavascriptとReactは学習中のため記述方法の知識に乏しく、どのように解決すれば良いのかがわからなかったので、もしおわかりになるようでしたらご教授いただけないでしょうか。

ソースコードにある以下のコードは、useContextを使用できるかどうかを試すために書いたものです。

const favNumber = 10; const NumberContext = createContext(favNumber);

該当のソースコード

React

1import React, { createContext, useEffect, useState } from "react"; 2import ReactDOM from "react-dom/client"; 3〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 4 5const router = createBrowserRouter([ 6 { 7 path: "/", 8 element: <Layout />, 9 children: [ 10 { index: true, element: <TopPage /> }, 11〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 12 ], 13 }, 14]); 15 16const favNumber = 10; 17const NumberContext = createContext(favNumber); 18 19const [number, setNumber] = useState(); 20 21const rootElement = document.getElementById("root"); 22ReactDOM.createRoot(rootElement).render( 23 <NumberContext.Provider value={favNumber}> 24 <React.StrictMode> 25 <RouterProvider router={router} /> 26 </React.StrictMode> 27 </NumberContext.Provider> 28); 29 30export default NumberContext; 31

試したこと

ソースコードのuseStateを記述している部分に、新たにコンポーネントを作成してその中にuseStateを記述したりもしてみたのですが、その新たに作成したコンポーネントをどのように記述して呼び出せばいいのかがよくわからず、うまく動作するような記述方法は見つかりませんでした。

この部分でuseStateを使えるようにするためにはどのように記述すればよいのかがお分かりになる方がいらっしゃいましたら、教えていただけると幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

0

useStateフックは、コンポーネントの内部で使用することができ、外部では使用できません。また、あなたのコードでは、ReactDOM.createRoot を使用していますが、これはクライアントサイドレンダリングではなく、サーバーサイドレンダリングのためのものです。

以下は、コードを修正する方法の例です。

import React, { createContext, useState } from "react"; import { createBrowserRouter, RouterProvider } from "found"; const favNumber = 10; const NumberContext = createContext(favNumber); const App = () => { const [number, setNumber] = useState(); return ( <NumberContext.Provider value={favNumber}> <RouterProvider router={router} /> </NumberContext.Provider> ); }; const router = createBrowserRouter([ { path: "/", element: <Layout />, children: [ { index: true, element: <TopPage /> } ], }, ]); ReactDOM.render(<App />, document.getElementById("root")); export default NumberContext;

AIからの回答です。

投稿2023/02/01 01:21

yori3963

総合スコア17

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

maisumakun

2023/02/01 01:23

> ReactDOM.createRoot を使用していますが、これはクライアントサイドレンダリングではなく、サーバーサイドレンダリングのためのものです。 違いはそうではなく、React18以上での新しい書き方です。

0

ベストアンサー

このような部分では、どのように記述すればuseStateが使えるのでしょうか?

不可能です。

stateを管理するために1つコンポーネントを作る(その中でNumberContext.Provider以下を描画する形にする)、というのが妥当です。

投稿2023/02/01 01:16

maisumakun

総合スコア142279

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

ARIA-0

2023/02/01 01:38

ありがとうございます! 新たにコンポーネントを作成し、その中でNumberContext.Provider以下を記述してみます!

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。